一个子目录里放100W个文件及SQL Server File Stream中放100W文件,会怎么样?

      如果我有100W个小文件,每个接近100K,然后我要放到一个目录里面,NTFS的子目录是否能够承受住单个目录存放100W的文件?如果采用sql server 2008的File Stream功能呢?我们知道SQL Server 2008启用了Filestream的字段的表,是一个字段放到一个子目录,如果我100W条记录都放在一个表里面,对应磁盘上仍然是1个子目录会有100W个文件。那结果会怎样?

      在很多流言中,有一些认为一个子目录存放超过10W的文件会产生不稳定的情况,通常在遇到这种场景,都直接建议采用分级目录存放,包括我们在一个表里面插入100W条记录。但是windows ntfs和sql server真的有这么差吗?当然不会,我们知道sql server 2008即使管理100T数据也没有问题。而网上最广泛的流言之一就是Oracle的性能比sql server的性能好,这个流言是在sql server 2000的时候产生的,那个时候是事实,但是sql server 2005已经改变了这一状况,而sql server 2008则彻底颠覆了这种情况,但是,流言,仍然继续的流传了下来(看看最新的TPC-E排名:http://www.tpc.org/tpce/results/tpce_perf_results.asp ,TPC-E可是比TPC-C的更新的基准测试哦)。还有一个著名的流言就是SharePoint列表中不要存放超过2000条记录,否则将引起性能的严重下降,这个流言在SharePoint 2003的时候是属实的,但是在SharePoint 2007里面就已经改善了,流言也仍然传了下来。

      首先说一下今天要讨论的场景,既然要在sql server 2008里面存放100W个文件,那么显然这是一个服务端应用,而不是一个客户端应用,因为没有人会手动的从100W个文件中去挑选什么。我的 测试环境如下:

      OS: Windows Server 2008 R2

      硬盘: SATA 日立 1T 7200转

      CPU:双核 2G

      数据库: SQL Server 2008 Enterprise(MSDN license)

      可用内存:足够大(不会出产生内存不足而导致的额外硬盘交换,占用IO的情况)

  测试文件大小:90K,也即将插入90K的文件100W份,相当于将这个文件复制了100W份。

      真正的服务器一般采用SCSI高速硬盘,所以IO状态会比我的测试机器好很多,而这台机器是我的开发用机,在1T的硬盘上还有3个虚机在同时运行,所以相对而言IO是比较差的。如果在我这台机器上能够承受的住,我相信在真正的服务器上都不会有任何问题。

      测试代码:      

代码
 1 static void Main(string[] args)
 2         {
 3             SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=NorthPole;Integrated Security=SSPI;");
 4             conn.Open();
 5             SqlCommand cmd = new SqlCommand();
 6             cmd.Connection = conn;
 7             cmd.CommandText = "AddFile";
 8             cmd.CommandType = System.Data.CommandType.StoredProcedure;
 9 
10             DateTime begin = DateTime.Now;
11             for (int i = 1; i < 100001; i++)
12             {
13                 cmd.ExecuteNonQuery();
14                 Console.WriteLine("{0} rows are inserted!", i);
15             }
16             DateTime end = DateTime.Now;
17             conn.Close();
18 
19             TimeSpan t = end - begin;
20             Console.WriteLine("{0} Days, {1} Hours, {2} Minutes, {3} Seconds", t.Days, t.Hours, t.Minutes, t.Seconds);
21             Console.ReadLine();
22         }
23 

 

里面的AddFile是存储过程:

 

代码
ALTER PROCEDURE [dbo].[AddFile] 
AS
BEGIN
    
-- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    
DECLARE @img AS VARBINARY(MAX)


-- Load the image data

SELECT @img = CAST(bulkcolumn AS VARBINARY(MAX))

      
FROM OPENROWSET(

            
BULK

            
'D:\temp\test.jpg',

            SINGLE_BLOB ) 
AS x

            

-- Insert the data to the table           

INSERT INTO Items (ItemID, ItemImage)

SELECT NEWID(), @img
END

 

 

我首先插入了10W条记录到数据库中,执行结果如下:

 

由于我担心Console.WriteLinei++这两句代码耗费时间过多,所以做了一下时间补偿,将cmd.ExecuteNonQuery()注释掉,然后做10W次空循环,结果如下:

基本不会对结果产生什么影响。

效率:总共:3757秒,0.03757/

然后我将循环改成了90W次,往数据库插入90W条记录,执行结果如下:

时间补偿:

效率:总共:52674秒, 0.0585/条。

 随着记录数的增多,显然速度会变慢,不过这点效率损失基本还能够忍受。

 虽然对应的目录里面存放了100W的记录,但是目录还是能够打开,不过windows文件管理器的响应速度会变慢,当然这个主要原因应该是widnows文件管理器的原因,毕竟100W条数据不是一个小数字。我们能够看到这个目录有100W项目。

 

通过sql语句:

SELECT TOP 1000 [ItemID]

      ,[ItemImage]

  FROM [NorthPole].[dbo].[Items]

 

取前1000行记录,大约用时16秒。

很明显,sql server 具有很好的缓存功能,当我再次执行这条语句的时候,仅仅用时6秒。

随后我执行了几次,基本都维持在67秒的样子。

在取任何一条记录的时候,时间都是0秒。我这里感觉不到速度的差异。

关于如何使用SQL Server File Stream功能,这里有一篇blog写的非常详细:http://www.simple-talk.com/sql/learn-sql-server/an-introduction-to-sql-server-filestream/

从我个人的感觉来说,基本没有什么问题,而且如果换成专门的服务器,采用快速的SCSI硬盘,效率应该比我现在的测试结果要好上很多。

 

当然上述结果仅供参考,如果你需要采用的话,建议在你的真实环境里面再实际测试一遍。毕竟不同的环境,可能得到的结果不相同。

 

 附加,额外的:

 

 

posted on 2010-04-21 14:18 ocean 阅读(1943) 评论(40) 编辑 收藏

评论

#1楼  回复 引用 查看   

100K的文件, 我是用单独的一个表来存储,用二进制方式写入与读出,性能是你的很多倍.看来2008的File stream不是很成熟
2010-04-21 14:33 | toEverybody      

#2楼  回复 引用 查看   

呵呵,流言不但具有杀伤性,还具有长时间的杀伤性。看看QQ群里面的留言,5年前看过的东西都会被拿来当新闻传播。
2010-04-21 14:36 | 不死鸟之魂      

#3楼  回复 引用 查看   

应该测试一下,在类似网站的图片目录中放100w个图片,页面随机显示几张,看看这个站点能支撑多少并发访问
2010-04-21 14:40 | riccc      

#4楼[楼主]  回复 引用 查看   

@1楼:
你没有测试100W个文件的数量,如果论单个100K的文件,那么你放到blob字段里面,速度可能会快,另外你比我快很多倍没有用处,因为我们的测试环境不同,不能说我这里是0.03秒,你那里是0.01秒就是比我快了。
你可以尝试一下,用blob字段在一个表里存100W个文件,效率会如何。而且你说sql server file stream不成熟的结论太武断了,没有任何数据支持。这就是程序员的悲哀啊。

@3楼:
在sql server里面使用File Stream,来操作,可以获得比较好的管理,比如并发、事务、备份等等。
2010-04-21 14:46 | ocean      

#5楼  回复 引用 查看   

ntfs的性能并不是很好,我曾经测试过ntfs和ext4比,性能差了差不多40%,特别是随机访问上面。
ntfs在windows下性能就更糟了,windows不像linux/unix支持异步io(win 2008听说是有了)。而且windows这个系统太乱来,它经常在空闲时在后台执行自我维护工作,所以windows 2008/windows 7系统空闲时就看到硬盘灯在狂闪。
2010-04-21 14:56 | Cheney Shue      

#6楼  回复 引用 查看   

引用而网上最广泛的流言之一就是Oracle的性能比sql server的性能好,这个流言是在sql server 2000的时候产生的,那个时候是事实,但是sql server 2005已经改变了这一状况,而sql server 2008则彻底颠覆了这种情况


彻底颠覆??这个结论是如何得出的?
你去看看TPC-C的排名
http://www.tpc.org/tpcc/results/tpcc_perf_results.asp?resulttype=all&amp;version=5%&amp;currencyID=0
2010-04-21 15:00 | Cheney Shue      

#7楼[楼主]  回复 引用 查看   

@6楼
是啊,你列出来的这些OS上,没有一个是sql server能够装的上的,自然没法比得过了,嘿嘿。
2010-04-21 15:08 | ocean      

#8楼  回复 引用 查看   




SELECT TOP 1000 [ItemID]

,[ItemImage]

FROM [NorthPole].[dbo].[Items]

这里是很不合理的,毕竟当你取文件的时候是一个一个的取.

目录里面存放了100W的记录,他读取的时候也是连文件内容一起读取的吗?
所以不合理

那么你更改一下你的
SELECT TOP 1000 [ItemID]
FROM [NorthPole].[dbo].[Items]
然后跟浏览器比较下谁快

基本上当你需要取文件的内容的时候会
如下处理
SELECT TOP 1[ItemID] ,[ItemImage]

FROM [NorthPole].[dbo].[Items]
where ItemID=1

这个做法之后,就是很不同了
2010-04-21 15:10 | sunriseyuen      

#9楼[楼主]  回复 引用 查看   

是的,当用top 1000的时候,是直接将1000个文件都取出来了。
至于你说的
SELECT TOP 1000 [ItemID]
FROM [NorthPole].[dbo].[Items]
这个,在sql server file stream里面没有意义,因为利用file stream,文件是放在磁盘上的,如果你不取文件,只取id,那么这个时间就和file stream完全没有关系了。
如果我只执行
SELECT TOP 1000 [ItemID]
FROM [NorthPole].[dbo].[Items]
这条语句,那么查询分析器给我的时间是0秒,这个速度过快了,如果我改成:
SELECT TOP 100000 [ItemID]
FROM [NorthPole].[dbo].[Items]
也就是取10W个id,那么给我的时间是1秒。

至于你说的
SELECT TOP 1[ItemID]
FROM [NorthPole].[dbo].[Items]
where ItemID=1
这种查询根本没法计算时间,查询分析器永远显示0秒,只能写C#代码来精确测试了。
这个大家有兴趣你可以自己做一下,因为我做这个测试的目的主要是为了检验一下在100W个文件的时候,会不会出现挂掉的情况,至于速度,实际上不太重要,因为只要是线性的,我可以通过增加CPU、内存,提高硬盘IO等来解决这些问题。所以0.1秒和0.2秒,在实际上是没有什么区别的。
2010-04-21 15:19 | ocean      

#10楼[楼主]  回复 引用 查看   

或者说,我测试的主要目的,主要为了测试这种情况,是否会出现崩溃的情况,比如说当100W的时候,查询一个文件直接会被卡住之类的。至于这个时间是0.1还是0.2还是更高,并不是很重要的事情,因为硬件的提升可以轻而易举的解决这种问题,只要这个速度不是太离谱就行,如果在100W的情况下取一条记录需要花费20秒,那我就要考虑硬件是否能跟的上了。
至于上面的朋友提到的并发的问题,确实是需要考虑的一个问题,所以并发方面上还是需要进行进一步的测试。
2010-04-21 15:23 | ocean      

#11楼  回复 引用 查看   

@ocean
我是说,你的
SELECT TOP 1000 [ItemID]

,[ItemImage]

FROM [NorthPole].[dbo].[Items]
没有任何意义,你说取出这1000个记录用来做什么?

真正有意义的是
SELECT TOP 1 [ItemID]

,[ItemImage]

FROM [NorthPole].[dbo].[Items]
where ItemID=12

把文件放数据库,可以当作文件分配表,或者你把数据库当作文件分配表.
2010-04-21 15:26 | sunriseyuen      

#12楼[楼主]  回复 引用 查看   

是啊,你后面说的根据id取一个记录的测试我也做了。那个top 1000只是我顺手做的,主要想计算一下顺序读取时,一个文件的平均值。
在实际应用中,主要还是单个单个取。只不过我的itemID都是GUID,所以我就从不同位置取了几个,感觉都差不多。
2010-04-21 15:29 | ocean      

#13楼  回复 引用 查看   

@ocean
你的这个设计是不合理,参考

操作系统对文件的操作大概如下

先找文件分配表,然后再找文件具体放在磁盘那个位置

那么你用数据库的形式是

先通过表找到文件内容的编号,再根据标号取出文件内容


那么现在就算你有1000万或上亿的文件
你有一个表用来存放你文件放的ID,比如可以存储在不同的服务器
然后,然后你根据ID到你所在的服务器上取得内容.

ID的形式可能是这样的 服务器编号:数据库:表:内容编号

那么你的内容可以存放在N不服务器上....
2010-04-21 15:32 | sunriseyuen      

#14楼[楼主]  回复 引用 查看   

oh, 这就是设计问题了。
如果我将文件放在不同的目录里面,那么我存上亿都没有问题。
sql server的文件流功能是字段和目录对应的,也即文件虽然看起来是存在了sql server里面,但是实际上sql server是将文件存在了目录里面,而不是它自身的mdf文件里面。
所以我用数据库的形式,是先通过表找到文件内容的编号,然后数据库会根据这个编号还原出来文件路径,也就是在磁盘上存在什么位置,然后就是通过操作系统找到这个文件,所以仍然要从文件分区表里面,去找那个文件在磁盘上的位置。

至于是否分配在不同的目录下,不同的服务器上,这个不是本主题讨论的范围。

我测试的目的,就是看看在这种情况下,100W个文件是否能否撑得住。
2010-04-21 15:40 | ocean      

#15楼  回复 引用 查看   

你的硬盤真大
2010-04-21 15:42 | 温景良(Jason)      

#16楼  回复 引用 查看   

@ocean
你去比较两个方式是想找到那个优越些 还是只想看看100W文件是否没有问题?
如果只是想看看100W文件是否有问题,你产生100W文件,然后进行压力测试就可以了,何必拿个数据库来比较呢.
2010-04-21 15:43 | sunriseyuen      

#17楼  回复 引用 查看   

看的不是很懂, 但也要学学
2010-04-21 15:50 | 小俞      

#18楼[楼主]  回复 引用 查看   

这个主要在于以前有人和我说一个目录中不要存放太多小文件,而且可能10W左右就会有不稳定的问题。而且我search了一下,发现网上也有这种说法,比如像这种:http://blog.cnw.com.cn/index.php/20937/viewspace-97654

所以我就干脆测一下。
为什么用数据库,只要是顺便也跟着测试一下sql server 2008的File Stream新特性,这样一箭双雕,即测试了文件系统,也测试了数据库,何乐而不为?

至于是否采用这种方案,这个就很难讲了,方案吗,要均衡考虑,就算能撑得住,也未必最终都会放在一个目录里面,但是至少现在我知道,放在一个目录里面也不会让系统挂掉。

而在此之前,如果别人问你,我往一个目录放100W个小文件,这个目录会挂掉吗?估计你也很难通过主观臆断来判断出来吧。
2010-04-21 15:52 | ocean      

#19楼  回复 引用 查看   

@ocean
个人看法考虑哪个方案,这个性能只是其一(这个性能可以稍作修改可以提升),另外还有需要考虑的是,数据是否保持一至性,备份... 之后这个文件的方式基本可以抛弃,如果你的资料不重要的,或需要老修改文件内容的,用文件的方式其实也不错,只是如果老需要修改文件内容的,这100W文件就.....
2010-04-21 15:59 | sunriseyuen      

#20楼[楼主]  回复 引用 查看   

@6楼
你给我的连接很好
http://www.tpc.org/tpcc/results/tpcc_perf_results.asp?resulttype=all&amp;version=5%&amp;currencyID=0

但是你给我的是TPC-C排名,而现在世界在发展,-C已经有点落后了,我们现在用更复杂的模型来衡量数据库,也就是TPC-E,那你是不是要看看TPC-E的排名呢?
http://www.tpc.org/tpce/results/tpce_perf_results.asp
这上面的排名就只有sql server了。
---------------------
事务处理性能委员会
  事务处理性能委员会(TPC)是一个不为盈利的组织,它定义了事务处理和数据库性能基准,并发布了基于这些基准的目标性能数据。TPC基准具有非常严格的要求,包括可靠性和承受能力测试,而且必须接受一个独立的审查。
  • 事务处理性能委员会(TPC)是一个非盈利的组织,它是为定义事务处理和数据库基准而建立的。
  • TPC-E基准是一个新的可扩展基准,它旨在代表联机事务处理(OLTP)系统。不像它的前任——TPC-C——TPC-E使用一个非常复杂但很现实的数据库架构,并要求主流功能,例如参照完整性和RAID保护存储。
2010-04-21 16:03 | ocean      

#21楼[楼主]  回复 引用 查看   

我们再看看TPC-H排名,虽然前三名不是sql,但是sql占有的席位最多,而且整个top ten里面就没出现过Oracle,叫嚣Oracle的还是趁早醒醒吧。虽然后面数据量增大时,比如3000G,Oracle也很不错,但是sql也在top 10里面,至少在top10里面都属于一个级别的数据库。别忘了top 10之间的数值虽然有高有底,但是最多也就一两倍,但是价钱呢?

http://www.tpc.org/tpch/results/tpch_perf_results.asp

Oracle 11g许可证只可以用三年,而SQL Server的许可证是终身有效的。

你可以想想你用Oracle要花多少钱,这些钱都购买N多个sql server了。
2010-04-21 16:08 | ocean      

#22楼[楼主]  回复 引用 查看   

@19楼
当然,实际上以前没有使用过sql server的file stream,顺道测试一下,至于客户用什么方案,那么他们自己去衡量,我只是给出测试数据。其实从我自己的前提而言,最好 就是按照时间,根据不同的目录来存放,比如一个月一个目录,这样最省事,不过这都不是讨论的主题了。
2010-04-21 16:09 | ocean      

#23楼  回复 引用 查看   

@ocean
TPC-E目前不作为正式测试环境,所以你去看那个排名都是x86的机器,ibm的aix都没有出来。TPC-H你比1,000GB以上的,数据仓库1TB以下没啥意思。如果你单纯比性能,拿Exadata一比,据对是无敌了。
2010-04-21 16:29 | Cheney Shue      

#24楼[楼主]  回复 引用 查看   

呵呵,那x86的机器上为什么能装上64位版的sql server?

TPC-E是对TPC-C的补充,是一个更新的基准,这个可不是你说不作为正式测试环境就不是正式测试环境了。TPC-E是一个更复杂更完善的测试模型,也是对原有的TPC-C的改进。

TPC-H中,1000G以上确实Oracle领先一点,但是别忘了,sql排名也不弱,在top 10里面的,基本可以说是一个级别的数据库,何况数据库也不仅仅是做数据仓库来用的。另外你怎么不考虑一下Oracle的价钱?
2010-04-21 16:39 | ocean      

#25楼  回复 引用 查看   

@ocean

谁说Oracle的授权只有三年?你去Oralce Online Store看看它的定价吧,看看比SQL Server贵多少?
对了SQL Server还要算上Windows Server的价格,你自己算算,谁的价格贵。

说性能,SQL Server不是很多高级特性都没有,比如我做数据仓库的,海量数据的load,Oracle用direct insert、transportable tablesapce等方法,性能比SQL Server快的不是百分之几十,而是快上几倍。
数据仓库查询Oracle有mv,sql rewrite,big data block,column compress,bitmap index……,同样优化后的数据库,我可以保证oracle比sql server快10倍以上。


不要乱散布留言!!
2010-04-21 16:42 | Cheney Shue      

#26楼[楼主]  回复 引用 查看   

你是否再看一下按照性价比来排名:
http://www.tpc.org/tpch/results/tpch_price_perf_results.asp

这个是不是所有Oracle排名就在sql之下了?在10000G的情况下,sql server反而是第一?

Oracle大大宣扬了它具有最好的价格/性能TPC-C基准,但是TPC-E基准更能代表客户的需求。之前,SQL Server在所有10个TPC-C价格/性能方面都保持了最好的结果。Oracle是通过利基许可证和支持了在现实世界中不实用的选项才达到这个结果的。

我说的颠覆了这个状况,就是说sql server不再比Oracle差,不是大家想想的,sql server比Oracle差很多,相反在很多场景下,sql server已经超过了Oracle。

当然Oracle本身也是一款优秀的数据库,这是毋庸置疑的。
2010-04-21 16:44 | ocean      

#27楼[楼主]  回复 引用 查看   

价格问题我就不和你争了,我在正文里面放一张图,你可以自己看看,当然你也可以列出你所知道的Oracle的价格。

另外我们主张论据,你说的一堆东西,没有任何论据,你说比sql 快10倍,那你给一个权威的测试报告啊。我们基于TPC讨论,这个是大家公认权威的,你自己没有论据,我只能说那是你不懂sql server,不会用。

当然在TPC-H的1000G之上,Oracle确实比sql 快一点,但是没有你说的10倍这么夸张,讲话要有证据。而且你从性价比的排名来看,sql 又完全领先Oracle了,那你说是Oracle便宜,还是sql便宜?
2010-04-21 16:52 | ocean      

#28楼[楼主]  回复 引用 查看   

https://shop.oracle.com/pls/ostore/f?p=ostore:product:576952978808304::NO:RP,3:P3_LPI,P3_PROD_HIER_ID:4509382199341805719938%2C4509958287721805720011

这里列出了Oracle 11g Enterprise 价格

Oracle Database Enterprise Edition
Oracle Database Enterprise Edition delivers industry leading performance while providing efficient, reliable, secure data management for mission-critical on-line transaction processing applications, query-intensive data warehouses, and content management and Web2.0 applications. Oracle Database Enterprise Edition is available on single and clustered servers with no socket limitation.

¥486,068.00 / Processor ,这是永久使用的价格。

sql server是30W,但是sql server是all in one,所有的东西都包含在里面,而Oracle你还需要另外花钱购买其他的组件,就如我正文的图一样。

Oracle许可证只能使用3年,貌似是一个谣言:
http://www.ctocio.com.cn/ttfiles/ccd/20081114/Noname.html

不过Oracle确实可以购买3年许可证,我刚刚看了一下,3年许可证是
¥243,034.00 / Processor

Metric:
Named User Plus Processor Term:
Perpetual 1 Year 2 Year 3 Year 4 Year 5 Year

Cost of first year support ¥106,934.85
2010-04-21 17:15 | ocean      

#29楼[楼主]  回复 引用 查看   

这里列出了Oracle的Enterprise Options,你可以看看有多么恐怖

https://shop.oracle.com/pls/ostore/f?p=ostore:2:0::NO:RP,2:PROD_HIER_ID:4509953293451805720010

当你买了一个Oracle Enterprise的时候,如果你需要OLAP,需要Data Mining,那么都需要单独花钱,更多的东西你都需要单独购买。

而sql server 是all in one的,购买了enterprise,什么OLAP,什么Reporting service,什么integration services,等等,全部包含了。总共大约3W美金多点。
2010-04-21 17:20 | ocean      

#30楼  回复 引用 查看   

我觉得ls的有些人都是吹毛求疵了,我想问一下你有你outlook里面放500w email会什么样?任何东西都需要维护的,难道你放1000w个小文件在一个文件夹,然后每分每秒都打开,并且你都需要?相信没人这样做吧,一般都会有archive的。
2010-04-21 17:22 | Vincent Yang      

#31楼[楼主]  回复 引用 查看   

对的,按照我的建议,就是每个月新建一个文件夹,然后多文件夹存放,什么都方便。
2010-04-21 17:40 | ocean      

#32楼  回复 引用 查看   

文章貌似缺乏一句结论性的总结。
2010-04-21 18:01 | Fisher WEI      

#33楼  回复 引用 查看   

性能测试总要有个benchmark吧,你得出6秒和16秒来,和谁对比来分辨性能好坏呢?(莫非是人人心里的一杆秤?)
2010-04-21 18:03 | Fisher WEI      

#34楼  回复 引用 查看   

引用ocean:
这里列出了Oracle的Enterprise Options,你可以看看有多么恐怖

https://shop.oracle.com/pls/ostore/f?p=ostore:2:0::NO:RP,2:PROD_HIER_ID:4509953293451805720010

当你买了一个Oracle Enterprise的时候,如果你需要OLAP,需要Data Mining,那么都需要单独花钱,更多的东西你都需要单独购买。

而sql server 是all in one的,购买了enterprise,什么OLAP,什么Reporting service,什么integration services,等等,全部包含了。总共大约3W美金多点。


哪家公司会按厂商指导价买软件啊。。。尤其是这种软件。。。
2010-04-21 18:09 | Fisher WEI      

#35楼[楼主]  回复 引用 查看   

@32楼-34楼
我有点无语,你能从我的正文里面找出性能测试4个字吗?我的标题就是问题,而测试结果就是答案。我本来就没有和谁比较的意思,6秒或者16秒就是测试数据,我不需要和别的方案比较谁快谁慢。

至于价格就更可笑了,难道只有Oracle会打折,sql就不会打折了?别的软件就不打折了?你打8折和我打8折最后比较起来这不是一样吗,既然大家都打折,那比较的时候就按照市场价比较好了。或许你关系好,某样产品能打折多一点,不过比较这个就没意义了。
2010-04-21 18:34 | ocean      

#36楼  回复 引用 查看   

引用Cheney Shue:
@ocean

谁说Oracle的授权只有三年?你去Oralce Online Store看看它的定价吧,看看比SQL Server贵多少?
对了SQL Server还要算上Windows Server的价格,你自己算算,谁的价格贵。

说性能,SQL Server不是很多高级特性都没有,比如我做数据仓库的,海量数据的load,Oracle用direct insert、transportable tablesapce等方法,性能比SQL Server快的不是百分之几十,而是快上几倍。
数据仓库查询Oracle有mv,sql rewrite,big data block,column compress,bitmap index……,同样优化后的数据库,我可以保证oracle比sql server快10倍以上。


不要乱散布留言!!


真正的流言。支持楼主。
2010-04-21 20:49 | zzmsl      

#37楼  回复 引用 查看   

oracle企业版单处理器是$47,500,sql server企业版单处理器$24,999。Windows Server 2008 R2 Enterprise 25 CALs价格$3,999。似乎好像是微软便宜那么一点点。

不过sql server的很多组件是个笑话,比如data mining,不知道它的浮点运算时几位的,算出来的东西总是不准,数据量越大差别越大。
olap也是,本来微软还和hyperion共同指定了xmla标准,可是从sql server 2005以后,微软自己把这个标准改的乱七八糟,之前的bo、cognos、hyperion的产品都不支持微软的olap了,所有现在sql server olap除了微软自己那个糟糕的reporting services外,无配套产品可用。
2010-04-21 21:13 | Cheney Shue      

#38楼  回复 引用 查看   

引用Cheney Shue:
@ocean
TPC-E目前不作为正式测试环境,所以你去看那个排名都是x86的机器,ibm的aix都没有出来。TPC-H你比1,000GB以上的,数据仓库1TB以下没啥意思。如果你单纯比性能,拿Exadata一比,据对是无敌了。


估计大部分公司的数据库都在100G以下,估计超过10G的都不多,能否说一下1TB数据库的应用场景,让大家开开眼界(存多媒体、文件等占用的空间应该排除掉)
2010-04-21 23:48 | James-yu      

#39楼  回复 引用 查看   

我现在在做YUM!的数据仓库项目 项目已经接近尾声 每天的数据量是3000w的单子 sql2008 里面 我们硬件做了32个磁盘组成的动态盘,表分区上搞了很多很多的partition,现在仍然觉得很吃力 3年的数据(从2007年开始)量达到了 2T的数据。。。。 etl 和 olap也是搞了一大堆的优化 但是性能仍然不容乐观。。。
2010-04-22 17:12 | 颜斌      

#40楼[楼主]  回复 引用 查看   

@38楼
这个,其实数据现在上T很容易。看看这篇blog,里面正好有微软自己使用的一些数据。光一个部门的(TFS部门)的开发数据就有15.5T了。TFS的所有数据都是存放在sql server的。

http://blog.joycode.com/soma/archive/2010/04/12/115934.joy

在VS2010项目开发周期里,我们做的第一件事情就是使用Team Foundation Server进行整个部门的bug跟踪及源代码管理。我们在之前的产品生命周期里使用TFS跟踪整个项目的产品特性,我们也在Team System组内使用TFS对源代码和bug进行管理。对于如此大型的项目,在全部门使用我们最新的工具,这对于我们自己可以说是迈出了一大步。现在整个项目已经临近结束,下面是一些针对TFS的一些统计数据:

3,668位活跃用户(以14天内的访问活动计算)
每月完成896次构建(Build)
828,978个工作项,包括缺陷,任务和其他我们追踪的工作
对25,170,852个源代码文件进行版本控制
高达15.5 TB数据
2010-04-23 16:22 | ocean