我有一个要求,即我拥有大量的传入数据到我拥有的系统中。
此集合中的单个数据单元具有一组连接到它的不可变属性+状态。国家是动态的,可以随时改变。
要求如下 -
我正在评估不同的技术以满足这些用例,并希望听到您的建议。我看了一下适合分析/聚合用例的Hive / Pig。但是,我担心随时可能进入系统的大量更新。与索引数据库(sql或nosql)相比,我不确定它在HDFS文件上的表现如何。
答案 0 :(得分:0)
您可能只能通过对环境中的实际场景进行压力测试来达到最佳解决方案,但这里有一些建议。首先,如果写入速度是瓶颈,那么将更改状态写入仅附加存储,与不可变数据分开,然后再次连接数据以进行查询可能是有意义的。仅附加写入(例如,像日志文件)将比更新现有记录更快,主要是因为它最小化了磁盘搜索。此策略还可以帮助解决查询期间您下面的数据更改问题。您可以及时查询“快照”。例如,HBase对记录保留了几个带时间戳的更新。 (这个数字是可配置的。)
这是一种称为多版本并发控制 - MVCC的持久性策略的特例。根据您的描述,即使更新同时发生,MVCC也可能是您在一段时间内执行查询并获得一致状态信息的最重要的基础策略。
当然,对这样的拆分数据进行连接会降低查询性能。因此,如果查询性能更重要,那么考虑编写整个记录,其中不可变数据与不断变化的状态一起重复。这将消耗更多空间,作为权衡。
答案 1 :(得分:0)
您可以考虑查看Flexviews。它支持为MySQL创建增量可刷新的物化视图。物化视图就像是查询的快照,它会定期更新已更改的数据。您可以使用实体化视图来汇总不同汇总表中的多个属性,并使这些视图在事务上保持一致。您可以在slideshare.net
上找到描述功能的幻灯片还有Shard-Query可以与InnoDB和MySQL分区结合使用,并支持在许多机器上传播数据。这将满足高更新率并将为快速聚合提供查询并行性。
当然,你可以将两者结合起来。