需求大致上是这样的:数据接收端每5-10个毫秒会从分布式计算网络收到1-10M左右的数据,希望在不影响接收线程接收速度,不丢帧的前提下,把这些数据记录下来。这些数据是以任务名+时间戳+数据的形式发送过来的。希望能根据任务名实时保存到数据库中。现在的问题是有哪些数据库比较适合干这件事。数据库新手,曾经尝试过SQLserver2008,每来一条数据就调用API写入数据库,结果常常崩溃。后来先在内存中缓存一些再写入数据库,但是申请内存多了也容易导致程序崩溃。对sqlserver未做什么优化。考虑NOSQL数据库是不是更适合干这种事情,例如mongoDB什么的。我们现在的临时解决方案有两个,一个是先在内存中缓存,然后新开线程向数据库写入,但是在回放使用数据时非常麻烦,要对数据排序,合并等等。另一个是数据先直接写到硬盘的dat文件中,在接收结束后再慢慢写入数据库,写入后删除硬盘上的文件。问题是这些数据有保密性和访问权限的要求,如果在写入数据库过程中程序崩溃或者程序被强行中止,那么硬盘上的数据就暴露了。所以还是希望能实时入库。
2 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
如果按照每10ms接收10M数据的话,1秒钟就是1G数据,每小时的数据量高达3.6T,这个大的数据量个人觉得使用传统的关系型数据已经不合适了。如果对查询的灵活性要求不高,建议直接放到日志文件存储。缓存的意义估计不大,一般配置的PCserver,在这样的大数据量下内存是不够用的。至于权限管理,应该和数据存放方式没有直接关系,毕竟不可能让用户直接查询数据库,权限处理在应用程序中处理就可以了。
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
队列+mongodb。数据先入队列,然后开多线程入库。----ps:1秒1G数据,1分钟1x60=60G数据,1小时3.6T,一天86.4T数据,一个月就2.5PB。您做的是什么东西==
添加回答
举报
0/150
提交
取消