h*******r 发帖数: 207 | 1 其实这个问题已经在另外一个贴子里问了http://www.mitbbs.com/article_t/Database/31166033.html,为了让更多的大牛看到,所以另外开了这个.
我现在是使用database来做自己的分析,这些分析还没有商业的
应用,彻底是自己用. 我自己已经用MS SQL Server 2008建立了自己的数据库,但是传统
的数据库读写对于我的分析来说太慢了,所以现在正在看In Memory Database. 这些In
Memory Database的许可上面都写的很模糊.比如我曾经想用KDB,最后发现试用版有很多
限制,比如最多一次只能运行两小时,等等.
所以上来问问大牛们的建议:In Memory Database哪个比较好(速度快,有JDBC Driver,
免费版没有限制等等). 现在我这儿看到的In Memory Database有这几个:
Oracle的TimesTen,
MySQL的cluster,
VoltDB,
H2,
HSQLDB,
MonetDB,
SQLite
如果漏掉了重要的,大牛帮我补上吧. 大牛请指教!
谢谢! | s**********o 发帖数: 14359 | 2 计算分析本来就是在内存里进行的,你问了半天,最后生成的数据库不存硬盘,关机就
没啦?我觉得你还是把自己想干的事说清楚,到底要做什么,数据哪里来,哪里去,用
什么分析,为什么慢,多少数据。10MB,100GB,还是100TB | h*******r 发帖数: 207 | 3 在我的分析里,database是作为一个分析的工具,过程是这样的:一个外部的计算程序向
database里面写入大约1000行数据,然后用query读取一些aggregated数据,分析以后,然
后再写入1000行,再读,这样的读写很频繁,但是重要的是最后外部计算程序分析的结果,
写入database的数据不要求存下来. | s**********o 发帖数: 14359 | 4 才1000行啊,你搞个TABLE VARIABLE就在内存里啊,算完放进去,用啥 In Memory
Database,注意做好INDEX
果,
【在 h*******r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 在我的分析里,database是作为一个分析的工具,过程是这样的:一个外部的计算程序向 : database里面写入大约1000行数据,然后用query读取一些aggregated数据,分析以后,然 : 后再写入1000行,再读,这样的读写很频繁,但是重要的是最后外部计算程序分析的结果, : 写入database的数据不要求存下来.
| h*******r 发帖数: 207 | 5 谢谢回复!
TABLE VARIABLE可不一定是在内存里,看这个帖子:
http://blog.sqlauthority.com/2009/12/15/sql-server-difference-t
用In Memory Database自由度会大一点,而在一般传统的database里面实现在memory里
面操作需要注意的地方太多。 | y****w 发帖数: 3747 | 6 你这个设计是不是有些问题? 是不能大批量处理还是你有海量数据?这些1k行当批次
间没有联系么?我的感觉是你这个系统还是要好好再看看设计。现在的数据库都可以处
理几百M或更高数量级的"row",想想这要1k一批还不得累死。
果,
【在 h*******r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 在我的分析里,database是作为一个分析的工具,过程是这样的:一个外部的计算程序向 : database里面写入大约1000行数据,然后用query读取一些aggregated数据,分析以后,然 : 后再写入1000行,再读,这样的读写很频繁,但是重要的是最后外部计算程序分析的结果, : 写入database的数据不要求存下来.
| p*********t 发帖数: 2690 | 7 同意,其实就是cache,在memory里,作为一个变量的值暂存,最后confirm的时候存到
数据库里。
lz用的什么语言?c,c++,java,asp.net c#/vb?
【在 s**********o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 才1000行啊,你搞个TABLE VARIABLE就在内存里啊,算完放进去,用啥 In Memory : Database,注意做好INDEX : : 果,
| s**********o 发帖数: 14359 | 8 你的内存大的话,整个TEMP DB都自动LOAD到内存里的,你的内存不够大,谈什么IN
MEMORY DATABASE,1000 records/s对任何一个数据库系统都是小意思,肯定你的程序
有问题 | e**1 发帖数: 452 | 9 agree
OS memory mgmt 完成很大一部分内存和硬盘的换入换出
DBMS底层实现通过系统调用完成一部分,但是如果物理内存上有限制的话, 谁家的
DBMS 都不好用。
【在 s**********o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你的内存大的话,整个TEMP DB都自动LOAD到内存里的,你的内存不够大,谈什么IN : MEMORY DATABASE,1000 records/s对任何一个数据库系统都是小意思,肯定你的程序 : 有问题
| w********m 发帖数: 1137 | | | | h*******r 发帖数: 207 | 11 谢谢大家回复。
首先,MS SQL Server没有任何机制能保证table在内存里,所以,没有必要花大量的精
力搞这种小trick,而且是还不知什么时候才work的小trick。我电脑的内存很大,完全
能容纳我的数据。
其次,这些分析是我自己用,所以,一切都是在我个人的电脑上做,没有企业级的配置
,个人电脑上的数据库读写能达到每秒上万次吗?
还有,我的分析对时间要求比较高,每次分析大约要一万次量化优化计算,每次优化计
算需要读写并aggregate写入的数据上千次,就是说,我的对数据库的需求基本上是
server的分析能力,而不是要求大量数据的存储。这样的话,数据库的读写占用的时间
就太多了,因为还有很多其它的量化计算要做,所以想减少数据库读写的时间,最好的
方法就是用内存数据库。我正在测试开始列出的几个,SQLite也在测试列表里面。有结
果再给大牛们汇报吧。
谢谢。 | y****w 发帖数: 3747 | 12 笔记本一次处理几万条数据也轻松,不用1k 1k来。
"一万次量化计算"不知道是啥. 也许你说明白点会好些。
仍然认为你这个性能问题不在数据库。 我感觉是你这个东西用sqllite或者其他内嵌
库就能做了,结果就是一个应用程序。 分析股票的应用?要不你拿张支票放这儿,哈。
【在 h*******r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 谢谢大家回复。 : 首先,MS SQL Server没有任何机制能保证table在内存里,所以,没有必要花大量的精 : 力搞这种小trick,而且是还不知什么时候才work的小trick。我电脑的内存很大,完全 : 能容纳我的数据。 : 其次,这些分析是我自己用,所以,一切都是在我个人的电脑上做,没有企业级的配置 : ,个人电脑上的数据库读写能达到每秒上万次吗? : 还有,我的分析对时间要求比较高,每次分析大约要一万次量化优化计算,每次优化计 : 算需要读写并aggregate写入的数据上千次,就是说,我的对数据库的需求基本上是 : server的分析能力,而不是要求大量数据的存储。这样的话,数据库的读写占用的时间 : 就太多了,因为还有很多其它的量化计算要做,所以想减少数据库读写的时间,最好的
| s**********o 发帖数: 14359 | 13 商业数据库HANDLE几百万交易/S都没有问题的,大银行都能用,一个1K/S的小程序,还
是你的ARCHITECTURE的问题吧,别神神秘秘的了,讲讲你的APPLICATION了,内存再大
,最多512G不得了了,弄个SSD也行啊,你那个简单的程序弄个SSIS好了,用FAST
TABLE LOAD。如果数据量小不到百万,根本就不是读写的问题,数据量大的话,10亿以
上,可以考虑用DW啊,干嘛1K1K的走。LOL | w********m 发帖数: 1137 | 14 rolling anslysis吧 估计是做high freqency trading类似的
【在 s**********o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 商业数据库HANDLE几百万交易/S都没有问题的,大银行都能用,一个1K/S的小程序,还 : 是你的ARCHITECTURE的问题吧,别神神秘秘的了,讲讲你的APPLICATION了,内存再大 : ,最多512G不得了了,弄个SSD也行啊,你那个简单的程序弄个SSIS好了,用FAST : TABLE LOAD。如果数据量小不到百万,根本就不是读写的问题,数据量大的话,10亿以 : 上,可以考虑用DW啊,干嘛1K1K的走。LOL
| j*******n 发帖数: 48 | 15 I agree with others that SQL Server should keep all your data in memory if
it's big enough. Logging to disk will happen but will not be significant.
But if you don't like it, there's also Redis and MemCached. |
|