数百万条记录的增量更新,索引与连接

Posted

技术标签:

【中文标题】数百万条记录的增量更新,索引与连接【英文标题】:Incremental update of millions of records, indexed vs. join 【发布时间】:2012-08-22 16:22:33 【问题描述】:

我目前正在制定一项增量更新用户数据的策略。我们假设我们的数据库中有 100_000_000 条记录,其中每个工作流更新大约 1_000_000 条记录。

这个想法是更新 MapReduce 作业中的记录。使用索引存储(例如 Cassandra)能够随机访问当前记录是否有用?还是最好从 HDFS 检索数据并将新信息加入现有记录。

记录大小为 O(200 字节)。用户数据具有固定长度,但应该是可扩展的。日志事件具有相似但不相等的结构。用户记录的数量可能会增加。近实时更新是可取的,即。 3小时的时间间隔是不可接受的,几分钟就可以了。

您是否对这些策略和这种规模的数据有任何经验? pig JOIN 速度够快吗?总是读取所有记录是瓶颈吗? Cassandra 是否能够有效地保存这么多数据?哪种解决方案是可扩展的?系统的复杂性如何?

【问题讨论】:

【参考方案1】:

您需要先定义您的要求。您的记录量不是问题,但您没有给出记录长度。它们是固定长度、固定字段编号、可能随时间改变格式吗?我们说的是 100 字节记录还是 100,000 字节记录?如果您希望按该字段/列查询,则需要在该字段/列上建立索引,除非您使用 map/reduce 完成所有工作。用户记录的数量会保持在 100mill(1 台服务器可能就足够了)还是每年增长 100%(可能随着时间的推移,多台服务器会添加新的服务器)。

您如何访问记录以进行更新取决于您是需要实时更新它们还是可以运行批处理作业。更新是每分钟、每小时还是每月?

我强烈建议你做一些实验。你已经做过任何测试了吗?这将为您的问题提供一个背景,这将导致更客观的问题和答案。您不太可能根据您的问题“白板化”解决方案。

【讨论】:

以上是关于数百万条记录的增量更新,索引与连接的主要内容,如果未能解决你的问题,请参考以下文章

sphinx增量索引和主索引来实现索引的实时更新

sphinx 增量索引 实现近实时更新

sphinx主索引和增量索引实时更新

sphinx主索引和增量索引实时更新

odi增量更新策略

处理具有数百万条记录更新和大量读数的 MySQL 表的最佳方法