由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 用数据库做蒙特卡洛模拟的问题
相关主题
一般操作很多的数据用什么数据结构?Many-to-Many 关系数据存储
问个弱智问题,有网站用nosql做primary db么?Please recommend embedded RDBMS for .Net 2.0 (转载)
春运火车票2个方案比较redis是否支持python复合数据结构?
我说老 bug,给个数据库模型大家学习学习给大家拜个年
问个问题写点程序需要存大量状态,用数据库的话太慢了。什么OPEN SOURCE的CODE对初级用户比较有用
问一个问题,有几百万个数,要求找出随便5个正数现在做手机网游,选什么数据库合适?
mongoDB跟传统关系数据库比有什么优势?some thoughts after Cassandra Summit
大数据c++正在向夕阳语言大幅度迈进
相关话题的讨论汇总
话题: ns话题: 000话题: 数据库话题: cache话题: ssd
进入Programming版参与讨论
1 (共1页)
S*******s
发帖数: 13043
1
任务本身很简单,大概有几万个记录,对每个记录都要应用一大堆假设参数产生几百个
数,再对产生的几十个M的数根据各种组合进行汇总统计。
最开始用excel+vba实现很简单,运算都在内存中,那几百万个数在生成的时候就同时
汇总,算完了就扔所以内存也够用,算一次也就是100多秒。
后来放到云上用node.js+mysql就遇到问题了。开始的想法是把记录、参数放在数据库
里,算的时候前面js遍历每一条记录,把中间结果写回数据库里,再用sql group by汇
总。这样运算了一次以后结果已经cache在数据库里再次运算就不用像excel一样重算,
只要算那些以前没算过的了。但是实际运行以后发现写回数据库非常慢,改用load
data local infile之后的速度仍然无法接受,load个几百兆的文件也要几十分钟。
显然瓶颈是和数据库的io操作。如果仍然想保留cache机制大家有什么好建议吗?把所
有的逻辑都用存储过程在数据库端实现吗?存储过程做那些事很笨拙,直觉不像是个好
主意。
W***o
发帖数: 6519
2
不明白为啥需要把中间结果保存到数据库里,是因为这些中间结果数量巨大导致内存装
不下吗?如果是这样,是不是可以多弄几台机器share memory?
S*******s
发帖数: 13043
3
for cache, also aggregation although not a must.
how to "多弄几台机器share memory"

【在 W***o 的大作中提到】
: 不明白为啥需要把中间结果保存到数据库里,是因为这些中间结果数量巨大导致内存装
: 不下吗?如果是这样,是不是可以多弄几台机器share memory?

c******n
发帖数: 16666
4
1. 去aws或者linode搞个大内存的vps
2. node --max_old_space_size=204800 yourApp.js
3. profit
linode200G内存的机器 也就一块钱1小时 不知道能不能撑到200g
但是上次我临时要算个东西 又不想开java 又不想改算法 搞了个24g的机器
划了16g跑nodejs 没啥问题
另就算你要拿数据库当临时存储的话 也要试试Redis
你用sql,估计I/O瓶颈里面还有mysql算indexing的那部分

【在 S*******s 的大作中提到】
: 任务本身很简单,大概有几万个记录,对每个记录都要应用一大堆假设参数产生几百个
: 数,再对产生的几十个M的数根据各种组合进行汇总统计。
: 最开始用excel+vba实现很简单,运算都在内存中,那几百万个数在生成的时候就同时
: 汇总,算完了就扔所以内存也够用,算一次也就是100多秒。
: 后来放到云上用node.js+mysql就遇到问题了。开始的想法是把记录、参数放在数据库
: 里,算的时候前面js遍历每一条记录,把中间结果写回数据库里,再用sql group by汇
: 总。这样运算了一次以后结果已经cache在数据库里再次运算就不用像excel一样重算,
: 只要算那些以前没算过的了。但是实际运行以后发现写回数据库非常慢,改用load
: data local infile之后的速度仍然无法接受,load个几百兆的文件也要几十分钟。
: 显然瓶颈是和数据库的io操作。如果仍然想保留cache机制大家有什么好建议吗?把所

d***a
发帖数: 13752
5
"显然瓶颈是和数据库的io操作。如果仍然想保留cache机制大家有什么好建议吗?把所
有的逻辑都用存储过程在数据库端实现吗?存储过程做那些事很笨拙,直觉不像是个好
主意。"
可以把中间生成的数据表放在内存里,MySQL应该有这个选项。放在HDD上确实是太慢了
,SSD也比内存慢很多。几百万个数,有几GB的内存足够了,真不够就把内存加大,几
十GB也不贵。
w********m
发帖数: 1137
6
用node不对吧。你这个要用hash map。
S*******s
发帖数: 13043
7
对,我依赖index on duplicate replace.
redis是啥,我搜搜看,谢谢
按理说我这个需求应该是很普遍很典型的吧,先从数据库里拿点数当输入,折腾出更多
的数出来存进数据库,再对这些新产生的数进行分析。我这才不到几百兆的数据,人家
大数据动辄几十T,也没听说这么慢吧?

【在 c******n 的大作中提到】
: 1. 去aws或者linode搞个大内存的vps
: 2. node --max_old_space_size=204800 yourApp.js
: 3. profit
: linode200G内存的机器 也就一块钱1小时 不知道能不能撑到200g
: 但是上次我临时要算个东西 又不想开java 又不想改算法 搞了个24g的机器
: 划了16g跑nodejs 没啥问题
: 另就算你要拿数据库当临时存储的话 也要试试Redis
: 你用sql,估计I/O瓶颈里面还有mysql算indexing的那部分

N*****r
发帖数: 94
8
第一数据不要直接写到数据库, 放在缓冲区攒齐了一起写
关系数据库的IO性能本来就奇差无比,你这完全是没实战经验
第二其实最好不要用数据库存储, 直接写在磁盘上, 后期计算几百万量级的数据直接
上大内存全部load到内存操作
第三, 大规模的数据排序更不要用关系数据库,直接写在磁盘上用external merge
sort, 这是通用做法
综上所述,你根本的错误就在于不应该在这里用数据库
S*******s
发帖数: 13043
9
very make sense.
how do they implement the big data?

【在 N*****r 的大作中提到】
: 第一数据不要直接写到数据库, 放在缓冲区攒齐了一起写
: 关系数据库的IO性能本来就奇差无比,你这完全是没实战经验
: 第二其实最好不要用数据库存储, 直接写在磁盘上, 后期计算几百万量级的数据直接
: 上大内存全部load到内存操作
: 第三, 大规模的数据排序更不要用关系数据库,直接写在磁盘上用external merge
: sort, 这是通用做法
: 综上所述,你根本的错误就在于不应该在这里用数据库

N*****r
发帖数: 94
10

不同的大数据有不同的处理办法
要看数据特征, 需要排序的和不需要的不一样, 要维护相对关系的和不需要维护相对
关系的不一样

【在 S*******s 的大作中提到】
: very make sense.
: how do they implement the big data?

相关主题
问一个问题,有几百万个数,要求找出随便5个正数Many-to-Many 关系数据存储
mongoDB跟传统关系数据库比有什么优势?Please recommend embedded RDBMS for .Net 2.0 (转载)
大数据redis是否支持python复合数据结构?
进入Programming版参与讨论
S*******s
发帖数: 13043
11
guess none is using RDBMS?
can you elaborate further, what technology is used for each case?

【在 N*****r 的大作中提到】
:
: 不同的大数据有不同的处理办法
: 要看数据特征, 需要排序的和不需要的不一样, 要维护相对关系的和不需要维护相对
: 关系的不一样

k*****u
发帖数: 1688
12

缓冲区一般怎么搞最好?
是不是data -> redis -> mysql 这样?
我曾经做过实时download twitter data,然后直接到db,基本每天都会挂掉
后来改成每天的data直接保存为jsonfile或者sqllite,放在硬盘上,一天一个file,
把日期加在文件名上
能不能帮忙解惑,实际生产环境是怎么个缓冲法?

【在 N*****r 的大作中提到】
: 第一数据不要直接写到数据库, 放在缓冲区攒齐了一起写
: 关系数据库的IO性能本来就奇差无比,你这完全是没实战经验
: 第二其实最好不要用数据库存储, 直接写在磁盘上, 后期计算几百万量级的数据直接
: 上大内存全部load到内存操作
: 第三, 大规模的数据排序更不要用关系数据库,直接写在磁盘上用external merge
: sort, 这是通用做法
: 综上所述,你根本的错误就在于不应该在这里用数据库

N*****r
发帖数: 94
13

看需要什么的环境吧
如果是要上关系数据库,只考虑读的速度memcached 和上面提到的 redis 都可以
关系数据库要读写都快,那就是redis
如果数据关联性不强, 那就用 nosql。或者土方法直接 hashtable + 大文件块
真要搞海量文件系统 google那篇 bigtable 要好好读
另外现在好像有新的海量关系数据库,没仔细看

【在 k*****u 的大作中提到】
: 赞
: 缓冲区一般怎么搞最好?
: 是不是data -> redis -> mysql 这样?
: 我曾经做过实时download twitter data,然后直接到db,基本每天都会挂掉
: 后来改成每天的data直接保存为jsonfile或者sqllite,放在硬盘上,一天一个file,
: 把日期加在文件名上
: 能不能帮忙解惑,实际生产环境是怎么个缓冲法?

d******c
发帖数: 2407
14
关系数据库建在那几条原则之上。你用不上的话就不需要用数据库。
仅仅是duplicate,那就是hash table足够。找个快的二进制格式存文件,尽量用内存。

【在 S*******s 的大作中提到】
: 对,我依赖index on duplicate replace.
: redis是啥,我搜搜看,谢谢
: 按理说我这个需求应该是很普遍很典型的吧,先从数据库里拿点数当输入,折腾出更多
: 的数出来存进数据库,再对这些新产生的数进行分析。我这才不到几百兆的数据,人家
: 大数据动辄几十T,也没听说这么慢吧?

d****n
发帖数: 1637
15
latency numbers every programmer should know.
FYI:
你那个数据库io最好的情况是disk io 再加上300ms delay.
几百个数据比较不出来啥,一百万个就会很大不同了。
Latency Comparison Numbers
--------------------------
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns 14x
L1 cache
Mutex lock/unlock 25 ns
Main memory reference 100 ns 20x
L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 3,000 ns 3 us
Send 1K bytes over 1 Gbps network 10,000 ns 10 us
Read 4K randomly from SSD* 150,000 ns 150 us ~
1GB/sec SSD
Read 1 MB sequentially from memory 250,000 ns 250 us
Round trip within same datacenter 500,000 ns 500 us
Read 1 MB sequentially from SSD* 1,000,000 ns 1,000 us 1 ms ~
1GB/sec SSD, 4X memory
Disk seek 10,000,000 ns 10,000 us 10 ms 20x
datacenter roundtrip
Read 1 MB sequentially from disk 20,000,000 ns 20,000 us 20 ms 80x
memory, 20X SSD
Send packet CA->Netherlands->CA 150,000,000 ns 150,000 us 150 ms
https://gist.github.com/jboner/2841832
w***g
发帖数: 5958
16
赞总结. 这些数量级最好能背下来.

14x

【在 d****n 的大作中提到】
: latency numbers every programmer should know.
: FYI:
: 你那个数据库io最好的情况是disk io 再加上300ms delay.
: 几百个数据比较不出来啥,一百万个就会很大不同了。
: Latency Comparison Numbers
: --------------------------
: L1 cache reference 0.5 ns
: Branch mispredict 5 ns
: L2 cache reference 7 ns 14x
: L1 cache

c******n
发帖数: 16666
17
收藏了

14x

【在 d****n 的大作中提到】
: latency numbers every programmer should know.
: FYI:
: 你那个数据库io最好的情况是disk io 再加上300ms delay.
: 几百个数据比较不出来啥,一百万个就会很大不同了。
: Latency Comparison Numbers
: --------------------------
: L1 cache reference 0.5 ns
: Branch mispredict 5 ns
: L2 cache reference 7 ns 14x
: L1 cache

g****t
发帖数: 31659
18
你用过很多存储过程吗?直觉从哪里来的?
你这个问题,我觉得最方便快捷的办法可能还就是存储过程。
你在excel+VBA没问题。
只要数据和处理都在一头,不要来回读写,应该就没问题。
oracle,DB2 + 存储过程不可能比excel+VBA慢啊

【在 S*******s 的大作中提到】
: 任务本身很简单,大概有几万个记录,对每个记录都要应用一大堆假设参数产生几百个
: 数,再对产生的几十个M的数根据各种组合进行汇总统计。
: 最开始用excel+vba实现很简单,运算都在内存中,那几百万个数在生成的时候就同时
: 汇总,算完了就扔所以内存也够用,算一次也就是100多秒。
: 后来放到云上用node.js+mysql就遇到问题了。开始的想法是把记录、参数放在数据库
: 里,算的时候前面js遍历每一条记录,把中间结果写回数据库里,再用sql group by汇
: 总。这样运算了一次以后结果已经cache在数据库里再次运算就不用像excel一样重算,
: 只要算那些以前没算过的了。但是实际运行以后发现写回数据库非常慢,改用load
: data local infile之后的速度仍然无法接受,load个几百兆的文件也要几十分钟。
: 显然瓶颈是和数据库的io操作。如果仍然想保留cache机制大家有什么好建议吗?把所

g****t
发帖数: 31659
19
他这个问题存储过程有不好的地方吗?
vba都可以搞定的

【在 N*****r 的大作中提到】
: 第一数据不要直接写到数据库, 放在缓冲区攒齐了一起写
: 关系数据库的IO性能本来就奇差无比,你这完全是没实战经验
: 第二其实最好不要用数据库存储, 直接写在磁盘上, 后期计算几百万量级的数据直接
: 上大内存全部load到内存操作
: 第三, 大规模的数据排序更不要用关系数据库,直接写在磁盘上用external merge
: sort, 这是通用做法
: 综上所述,你根本的错误就在于不应该在这里用数据库

N*****r
发帖数: 94
20

他一开始本机excel + vba 是没啥问题啊
问题在于他后来在上mysql
mysql 没有优化的话,同时写150个记录就可能出问题
关系数据库同时写从来都是大问题,因为有lock

【在 g****t 的大作中提到】
: 你用过很多存储过程吗?直觉从哪里来的?
: 你这个问题,我觉得最方便快捷的办法可能还就是存储过程。
: 你在excel+VBA没问题。
: 只要数据和处理都在一头,不要来回读写,应该就没问题。
: oracle,DB2 + 存储过程不可能比excel+VBA慢啊

相关主题
给大家拜个年some thoughts after Cassandra Summit
什么OPEN SOURCE的CODE对初级用户比较有用c++正在向夕阳语言大幅度迈进
现在做手机网游,选什么数据库合适?求推荐database的软件 (转载)
进入Programming版参与讨论
g****t
发帖数: 31659
21
Excel同时写照样也有锁
我觉得问题就在于他不用自带的存储过程
用别的踩了坑
我猜
所有逻辑数据库端存储过程实现
Vs excel vba
前者不应该差很多


: 他一开始本机excel vba 是没啥问题啊

: 问题在于他后来在上mysql

: mysql 没有优化的话,同时写150个记录就可能出问题

: 关系数据库同时写从来都是大问题,因为有lock



【在 N*****r 的大作中提到】
:
: 他一开始本机excel + vba 是没啥问题啊
: 问题在于他后来在上mysql
: mysql 没有优化的话,同时写150个记录就可能出问题
: 关系数据库同时写从来都是大问题,因为有lock

S*******s
发帖数: 13043
22
现在先用现场算+redis缓存对付了。redis真神奇啊,有缓存的秒现,没在缓存的即使
现算也不算慢。以后有空再琢磨怎么弄个更漂亮的。
多谢诸位支招。
这个express-redis-cache的内存策略是什么样的?不会不重启就不停地占内存吧?
c******n
发帖数: 16666
23
你没试一下另一个直接跑的方法? 很好奇v8 在超大内存下会不会有奇怪的问题
我最近改了个代码 内存占用少了700M,处理时间缩短了10多秒 看来一般而言果然还是
改代码最有用。。。

【在 S*******s 的大作中提到】
: 现在先用现场算+redis缓存对付了。redis真神奇啊,有缓存的秒现,没在缓存的即使
: 现算也不算慢。以后有空再琢磨怎么弄个更漂亮的。
: 多谢诸位支招。
: 这个express-redis-cache的内存策略是什么样的?不会不重启就不停地占内存吧?

S*******s
发帖数: 13043
24
现在就是在缓冲没有命中的时候直接跑,你问的是这个吗?
缓冲只记录最后汇总的结果,所以对内存压力不大。

【在 c******n 的大作中提到】
: 你没试一下另一个直接跑的方法? 很好奇v8 在超大内存下会不会有奇怪的问题
: 我最近改了个代码 内存占用少了700M,处理时间缩短了10多秒 看来一般而言果然还是
: 改代码最有用。。。

1 (共1页)
进入Programming版参与讨论
相关主题
c++正在向夕阳语言大幅度迈进问个问题写点程序需要存大量状态,用数据库的话太慢了。
求推荐database的软件 (转载)问一个问题,有几百万个数,要求找出随便5个正数
我的一个客户案例(high traffic),请大家批判分析指点mongoDB跟传统关系数据库比有什么优势?
你们有没有一种感觉,其实big data大数据
一般操作很多的数据用什么数据结构?Many-to-Many 关系数据存储
问个弱智问题,有网站用nosql做primary db么?Please recommend embedded RDBMS for .Net 2.0 (转载)
春运火车票2个方案比较redis是否支持python复合数据结构?
我说老 bug,给个数据库模型大家学习学习给大家拜个年
相关话题的讨论汇总
话题: ns话题: 000话题: 数据库话题: cache话题: ssd