我们现在正在做一个收藏夹的项目,因为数据量大考虑以下两种方案不知哪种性能更好,请大家来讨论(此讨论在多个板块开发出,请大家关注)。
问题:我们网站有几十万的注册用户,现在给注册用户开通网页收藏夹的功能,每位用户可以收藏若干个网址(内容包括网址、用户评论等)假如每位用户收藏200条录,那么50万的用户,总共就会有一亿条记录(要对这1亿条记录进行添、删、改、检索的操作)。
方案1:运用xml+sql2000来荐储数据。对第位用户建一个xml,用xml来存储用户的收藏夹,sql2000里只存储标题及关键字(便于搜索)用户每次对自己的收藏夹操作时,只要修改用户的xml文件,只有查询时才对sql2000数据库进行查询操作。
方案2:所有信息全部放在sql2000里,每次操作直接在sql2000中完成。
条件:必须用mssql数据库
请大家讨论看哪种方案更好或有其它的方案,并说明理由。
问题:我们网站有几十万的注册用户,现在给注册用户开通网页收藏夹的功能,每位用户可以收藏若干个网址(内容包括网址、用户评论等)假如每位用户收藏200条录,那么50万的用户,总共就会有一亿条记录(要对这1亿条记录进行添、删、改、检索的操作)。
方案1:运用xml+sql2000来荐储数据。对第位用户建一个xml,用xml来存储用户的收藏夹,sql2000里只存储标题及关键字(便于搜索)用户每次对自己的收藏夹操作时,只要修改用户的xml文件,只有查询时才对sql2000数据库进行查询操作。
方案2:所有信息全部放在sql2000里,每次操作直接在sql2000中完成。
条件:必须用mssql数据库
请大家讨论看哪种方案更好或有其它的方案,并说明理由。
或者把XML文件直接存到数据库里面去。因为如果你整个XML文件里面的记录总是一次性取出的话,你把它分成一亿条记录储存肯定是不合理的。不管怎么样,检索1条记录比检索200条记录快……
方案一不定快的。
1. 读一条大的记录不一定快过读200条小的记录。
2. 添、删、改时,方案二只需处理一条小的记录,方案一却要处理一个二百倍大的记录。
3. 方案二可以方便的进行统计与检索,比如说那个网站被收录最多等。
方案一不定快的。
1. 读一条大的记录不一定快过读200条小的记录。
2. 添、删、改时,方案二只需处理一条小的记录,方案一却要处理一个二百倍大的记录。
3. 方案二可以方便的进行统计与检索,比如说那个网站被收录最多等。
----------------------------------------------------------------
主要还是看需求来,如果是还要统计哪个网站被收录最多,恐怕这样的库结构也都要改了。
为了减少app与db的通信次数,建议做成储存过程.
把一批纪录用xml的格式作为文本已文本参数的形式带入到储存过程当中.
然后再sql中以openXml来解析XMl的文本来update.delete,insert
变通一下,可以考虑将用户频繁操作的内容放置在hashtable,并cache。然后定期启动后台线程update数据库。
-----------------------------------
数据库和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作为数据源的人提供一点启示
第二个对上亿的好象不现实吧~~~
看看csdn是怎么存的,对你一定有帮助
要不xml还用来干嘛~~
可以考虑新的数据类型-- xml数据类型。
把把不怎么需要更新或不怎么会引起并发的数据通过xml数据类型存储。
使用xml+ xslt显示前台页面。
我不想多说只丢几个我在项目中的数据出来
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,这个还需要比吗?)