我有一个需求,在我拥有的系统中有大量的输入数据。
该集合中的单个数据单元具有一组不变的属性+状态。状态是动态的,可以随时改变。
有关规定如下:
我正在评估不同的技术,以满足这些用例,并希望听到您的建议。我看了一下Hive/Pig,它适合分析/聚合用例。然而,我对随时可能进入系统的大量更新感到关切。我不确定与索引数据库(sql或nosql)相比,HDFS文件是如何执行的。
发布于 2011-04-09 15:09:02
您可能只有通过在您的环境中对实际场景进行压力测试才能找到最佳解决方案,但以下是一些建议。首先,如果写入速度是一个瓶颈,那么将更改状态写入仅追加的存储区(与不可变数据分开)可能是有意义的,然后再次加入数据以进行查询。仅附加写入(例如,日志文件)将比更新现有记录更快,主要是因为它将磁盘查找最小化。这种策略还可以帮助解决查询期间底层数据更改的问题。您可以及时查询“快照”。例如,HBase对一条记录进行了多次时间戳更新。(数字是可配置的。)
这是称为多版本并发控制( MVCC )的持久性策略的特例。根据您的描述,MVCC可能是您执行一段时间的查询并获得一致的状态信息的最重要的底层策略,即使同时进行更新。
当然,这样对分割的数据执行连接会降低查询性能。因此,如果查询性能更重要,那么考虑写入整个记录,其中不变的数据随着状态的变化而重复。这将消耗更多的空间,作为一种权衡。
发布于 2011-05-08 07:11:42
您可以考虑查看Flexview。它支持为MySQL创建增量式的可刷新的物化视图。物化视图类似于查询的快照,该快照会定期使用已更改的数据进行更新。您可以使用物化视图对不同汇总表中的多个属性进行汇总,并保持这些视图在事务上的一致性。您可以找到一些描述slideshare.net功能的幻灯片。
还有碎片查询,它可以与InnoDB和MySQL分区结合使用,并支持在许多机器上传播数据。这将同时满足高更新率,并为快速聚合提供查询并行性。
当然,你可以把这两者结合在一起。
https://stackoverflow.com/questions/5600683
复制相似问题