1

我有一个要求,我有大量传入数据到我拥有的系统中。

该集合中的单个数据单元具有一组附加的不可变属性 + 状态。状态是动态的,可以随时更改。

要求如下——

  1. 大型数据集可能会经历状态变化。更新需要快速。
  2. 我应该能够聚合以各种属性为中心的数据。
  3. 理想情况下 - 应该有一种方法可以将单个数据单元与聚合结果相关联,即我想深入研究产生某种聚合的特定事务。(我知道这里的竞争条件,例如在执行聚合后数据单元的状态发生变化;但这是意料之中的)。
  4. 所有聚合都是基于时间的 - 即在一天、2 天、一周、一个月等中枢轴 y 上的 x 总和。

我正在评估不同的技术来满足这些用例,并想听听您的建议。我查看了适合分析/聚合用例的 Hive/Pig。但是,我担心随时可能进入系统的大量更新。与索引数据库(sql 或 nosql)相比,我不确定这在 HDFS 文件上的表现如何。

4

2 回答 2

0

您可能仅通过对环境中的实际场景进行压力测试才能得出最佳解决方案,但这里有一些建议。首先,如果写入速度是一个瓶颈,那么将变化的状态写入一个仅附加存储,与不可变数据分开,然后再次连接数据以进行查询可能是有意义的。仅追加写入(例如,像日志文件)将比更新现有记录更快,主要是因为它最大限度地减少了磁盘查找。此策略还可以帮助解决查询期间数据更改的问题。您可以及时查询“快照”。例如,HBase 会为一条记录保留多个带有时间戳的更新。(数量是可配置的。)

这是称为多版本并发控制 - MVCC 的持久性策略的一个特例。根据您的描述,MVCC 可能是您在一段时间内执行查询并获得一致的状态信息返回的最重要的底层策略,即使同时更新也是如此。

当然,像这样对拆分数据进行连接会降低查询性能。因此,如果查询性能更重要,那么考虑写入不可变数据随着状态变化而重复的整个记录​​。作为权衡,这将消耗更多空间。

于 2011-04-09T15:09:02.057 回答
0

您可能会考虑查看Flexviews。它支持为 MySQL 创建增量可刷新的物化视图。物化视图就像一个查询的快照,它会使用已更改的数据定期更新。您可以使用物化视图对不同汇总表中的多个属性进行汇总,并使这些视图在事务上保持一致。您可以在slideshare.net上找到一些描述功能的幻灯片

还有Shard-Query可以与 InnoDB 和 MySQL 分区结合使用,并支持在多台机器上传播数据。这将满足高更新率并为快速聚合提供查询并行性。

当然,您可以将两者结合在一起。

于 2011-05-08T07:11:42.130 回答