我必须为一个应用程序创建一个DBF,该应用程序将在每分钟从500万个传感器收集数据,所以我将每分钟有500万条记录。
我正在考虑使用server,因为我每天将有720亿条记录。但是当我在我的PC (双核E6300,@ Gb,HDD500GBSATA)上测试写入速度时,我发现Visual 9的记录速度是Server 2008的100倍。
Server,2.55分钟:
declare @i int=1
while @i<1000001
begin
insert into dbo.sensor (sensorid, datetime, value) values (1,getdate(),@i)
set @i=@i+1
endVFP9,2秒:
? DATETIME ()
FOR i=1 TO 1 000 000 STEP 1
INSERT INTO Table1 (sensorid, dtime, value, status) VALUES (i, date(), i, "S")
ENDFOR
? DATETIME()我要说的是,没有索引,该表将被只阅读。怎么啦?
发布于 2011-08-26 12:51:46
一个很好的起点是查看SQL团队关于Server 2008的数据加载性能的白纸。
SQL Server中的过程循环非常慢,这将是时间差异的很大一部分。最好生成要大容量加载到数据库中的文件,以度量性能差异。而且,数据库的大小将很快需要使用多个数据库文件来扩展负载,我不确定FoxPro是否有任何内置支持。
发布于 2011-08-29 11:47:18
单凭大小,FoxPro DBF并不是一个真正的选项。VFP中的DBF文件仅限于2GB。看起来,您的数据将至少为每一行20个字节,这意味着一天的数据值超过100 at。我建议您忘记使用DBFs。
DBMS的写性能只是问题的一个方面,实际的速度将取决于整个堆栈、读取和缓存数据的方式等等。
您看过可用的各种复杂事件处理(CEP)解决方案吗?您应该使用一些技术来优化流数据的存储和操作。一些可用的CEP解决方案包括: Oracle、Microsoft、StreamInsight、StreamBase和OsiSoft PI系统。
发布于 2011-08-26 18:54:22
编辑应用程序,使用bulk insert提供程序将数据批量插入到表中,这样就会得到更好的结果。这将比使用循环一次插入一行要好得多。您可以通过使用要插入的值创建文本文件来模拟这种情况,然后使用T/SQL中的BULK insert语句或BCP命令行应用程序来批量加载数据。
如果要将数据大容量加载到生产表中,则完全保留恢复。如果要将批量加载到暂存表中,然后对其进行处理,则可以将恢复从完全恢复更改为大容量日志记录,或者简单地减少事务日志中的数据量。不要在没有使用完整恢复模型的情况下直接将数据大容量加载到生产表中。
https://dba.stackexchange.com/questions/5074
复制相似问题