我们现在正在做一个收藏夹的项目,因为数据量大考虑以下两种方案不知哪种性能更好,请大家来讨论(此讨论在多个板块开发出,请大家关注)。
问题:我们网站有几十万的注册用户,现在给注册用户开通网页收藏夹的功能,每位用户可以收藏若干个网址(内容包括网址、用户评论等)假如每位用户收藏200条录,那么50万的用户,总共就会有一亿条记录(要对这1亿条记录进行添、删、改、检索的操作)。
方案1:运用xml+sql2000来荐储数据。对第位用户建一个xml,用xml来存储用户的收藏夹,sql2000里只存储标题及关键字(便于搜索)用户每次对自己的收藏夹操作时,只要修改用户的xml文件,只有查询时才对sql2000数据库进行查询操作。
方案2:所有信息全部放在sql2000里,每次操作直接在sql2000中完成。
条件:必须用mssql数据库
请大家讨论看哪种方案更好或有其它的方案,并说明理由。

解决方案 »

  1.   

    当然是方案2了,xml一般只用来作比较小的数据库或当作配置文件,sql2000是专业数据管理系统,xml文件再怎么也是对文件的操作,无论查询上还是修改速度上都比不上专业的。
      

  2.   

    方案2XML  只作数据传输格式还是不错的选作    当作数据库库用 有点%%%%%%…………%¥[
      

  3.   

    第一种更快……
    或者把XML文件直接存到数据库里面去。因为如果你整个XML文件里面的记录总是一次性取出的话,你把它分成一亿条记录储存肯定是不合理的。不管怎么样,检索1条记录比检索200条记录快……
      

  4.   

    方案2  sql2000管理比较专业
      

  5.   

    To BeRush(艾威):
    方案一不定快的。
    1. 读一条大的记录不一定快过读200条小的记录。
    2. 添、删、改时,方案二只需处理一条小的记录,方案一却要处理一个二百倍大的记录。
    3. 方案二可以方便的进行统计与检索,比如说那个网站被收录最多等。
      

  6.   

    To BeRush(艾威):
    方案一不定快的。
    1. 读一条大的记录不一定快过读200条小的记录。
    2. 添、删、改时,方案二只需处理一条小的记录,方案一却要处理一个二百倍大的记录。
    3. 方案二可以方便的进行统计与检索,比如说那个网站被收录最多等。
    ----------------------------------------------------------------
    主要还是看需求来,如果是还要统计哪个网站被收录最多,恐怕这样的库结构也都要改了。
      

  7.   

    2# 作update.delete,insert的时候..
        为了减少app与db的通信次数,建议做成储存过程.
        把一批纪录用xml的格式作为文本已文本参数的形式带入到储存过程当中.
        然后再sql中以openXml来解析XMl的文本来update.delete,insert
      

  8.   

    方案2更好,MSSQL有良好的数据并发性,你们网站的用户这么多,使用XML文件作为存储主体的话那将会是恶梦。XML是为的跨平台而设计的一种数据标准,除了极强的兼容性之外,其文件的并发存取能力视乎操作系统和你的硬件性能,并发性通常都是不敢恭维的
      

  9.   

    肯定只考虑方案二。
    变通一下,可以考虑将用户频繁操作的内容放置在hashtable,并cache。然后定期启动后台线程update数据库。
      

  10.   

    用第一种方案!每个用户单独一个xml文件 --- 甚者就是静态html,占较大的存储空间,但是操作起来较快不考虑所谓的并发能力,因为用户与用户各自的文件并不相干不考虑诸如“统计哪个网站被收录最多”的统计查询,这样的功能完全可以有别的方式来实现,例如对每个固定的地址作了一个计数器,收录就加一,解除收藏就减一如果最后还是要统计,还是要经常一个有1亿条数据的表,那么更应该考虑的是,实现这样的功能是否划算,服务器的资源都是很宝贵的,资源真的用在刀刃上了吗?
      

  11.   

    同意楼意建,我不知道说第2种方案的用户怎么想的,数据又不是万能的,你们都不用考虑性能的吗?回家作一个有上亿条记录的数据,再编个程序,模拟一下操作,看一下,你们的电脑能扛往几台,你可以看一下csdn 的贴子是怎么存的,第一种方案可能,是最好的方案,!因为读取的时候,节省了N多资源,
      

  12.   

    转:
    -----------------------------------
    数据库和XML数据读取性能比较。硬件:CPU P4赛扬2.2G,内存512M操作系统:Windows XP SP2数据库:Access2002软件环境:JDK1.4,Eclipse3.01 数据库采用JDBC-ODBC桥的方式连接,XML的访问采用SAX方式。性能参数如下:记录数    XML读取时间(毫秒)  数据库读取时间(毫秒)
     
    100         156                     94
     
    1000        500                     93
     
    3000        828                     94
     
    5000        1000                    109
     
    10000       1485                    94
     
    100000      9172                    125
     很明显,数据库的性能大大超过XML,XML的数据量在超过10000条记录时访问时间超过了1秒,性能难以承受。而数据库对数据量的增加不太敏感。几点说明:1.       Access数据库对于大数据量的数据是不够的,要测试海量数据最好使用SqlServer之类的专业数据库;2.       JDBC-ODBC桥的方式是数据库访问方式中效率最低的,也就是说采用其他方式还可以进一步提高数据库的性能。3.       XML的访问我不是直接写SAX代码得到的,而是通过EMF(Eclipse Model Framework)自动生成的代码得到的,这样函数调用的层数增多了,对性能有一些影响,不过影响不会太大,对于IO来说,函数跳转的时间可以忽略不计。4.       XML应该适合小量的数据存储,最好少于10000条记录,这样访问时间可以保持在2秒以下,勉强可以接受。5、    层次型的数据只能用XML了;关系性数据库,数据量的大小和对数据库操作的复杂性。数据量大,并对数据有复杂的查询、修改等操作,建议用数据库。另外,数据库的安全性也要好。希望这组数据可以对使用XML作为数据源的人提供一点启示
      

  13.   

    嗯...第一种好吧~我看了msn保存聊天记录也用了那个,我自己也是这样用XML+SQLSERVER2000.如果只是实现那个功能的话建议用第二种好啦
      

  14.   

    SQL Server 2000 应该支持不到1亿条记录(查询会比较慢),由于SQL Server 200对XML支持有限,因此采用集合XML的形式也不是最好方案。我的方案是,在SQL Server中分表存储,比如按照用户登录帐号,AA-ZZ可以分出26×26个表,这样分到每个表的容量大概在100万~300万条左右,SQL Server 2000处理这样的数据容量不会有什么问题。而且针对用户收藏功能,一般只要求根据某个用户的ID,读取所有的列表就可以了,按照上面的方案,每个用户的所有收藏都集中在一个表里面,实现很简单。当然如果要知道某个网址被那些用户收藏就麻烦,不过一般也不需要实现这种业务。至于前端的用户显示,由于每个用户的收藏列表更新不会很频繁,因此有必要对收藏列表进行静态实现,即将每个用户的收藏列表读出来并写入到一个静态的HTML文件中,每次访问只访问这个静态页面而不需要查询数据库,如果收藏条目发生变更,再记录到数据库,并重新更新所有静态列表文件。
      

  15.   

    第一个好,读取快,占资源少!~
    第二个对上亿的好象不现实吧~~~
    看看csdn是怎么存的,对你一定有帮助
      

  16.   

    肯定是第一个啊~~
    要不xml还用来干嘛~~
      

  17.   

    采用sql server 2005,
    可以考虑新的数据类型-- xml数据类型。
    把把不怎么需要更新或不怎么会引起并发的数据通过xml数据类型存储。
    使用xml+ xslt显示前台页面。
      

  18.   

    第一种比较合适,我的想法是:通过XML文件来接收数据,然后在解析这个XML文件,之后再把数据保存到数据库中。这也是通常的大众化的做法。
      

  19.   

    方案一:
    我不想多说只丢几个我在项目中的数据出来
    1.   100人同时操作SQL数据库延时5-10秒
    2.   150人同时操作SQL数据库延时13-27秒
    3.   170人同时操作SQL数据库延时43秒+++++
    这里是说数据库的延时,如果再加上网络延时,叫那些说方案二的人去试试受不受的了...再说一下我个人的观点,你这么大的数据量,别说XML比SQL好,就算你一人给个文本都比SQL跑的快....再说说那个用XML和Access做比较的,,你是怎么比的啊?
    一个数据库 VS 一个XML     地球人都知道数据库快...用的着这些没用的数据吗?
    现在是
    一个数据库 VS 50W个XML(1个超级超级好的server对50W台一般的PC,这个还需要比吗?)
      

  20.   

    虽然一听起来可能人数会比较多,但是同时并发的操作可能数量还是有限的,用XML文件记录的方式可以节约掉不少数据库的工作,对于SQL2000的性能说实话我感觉自己还不太了解,也没有把SQL2000应用到大项目中的经验,所以只能说你应该根据你网站中浏览人数的并发数来判断是否够
      

  21.   

    我对这个有非常大的意见.1.SQL价格贵..按一个一个普通的网络公司要多花几十万的SQL SERVER费用.2.SQL没有XML快.每次都要建立联接.优点是很好管理.对XML来说.就不同了.成本底..只是文本文件储存.速度是一流的.就像我现在的网站3000左右的在线用户.根本看不出什么慢的现像.缺点是:不好管理.文件数量太多.程序难写一点.而每个XML文件都最好不要超过1M左右.不然就看不到快了..呵呵..