我目前正在制定一项增量更新用户数据的策略。我们假设在我们的数据库中有100_000_000条记录,其中每个工作流程更新大约1_000_000条记录。
这个想法是更新MapReduce作业中的记录。使用索引存储(例如Cassandra)来随机访问当前记录是否有用?或者最好从HDFS检索数据并将新信息加入现有记录。
记录大小为O(200字节)。用户数据具有固定长度但应该是可扩展的。日志事件具有相似但不相同的结构。用户记录的数量可能会增加。近乎实时的更新是可取的,即。 3小时的时间差是不可接受的,几分钟就可以了。
您是否有过这些策略和这种规模的数据的经验? 猪JOIN足够快吗?读取所有记录总是瓶颈吗? Cassandra能够有效地保存这些数据吗?哪种解决方案可扩展?系统的复杂性怎么样?
答案 0 :(得分:1)
您需要先定义您的要求。您的记录量不是问题,但您没有给出记录长度。它们是固定长度,固定字段数,可能随时间改变格式吗?我们在谈论100字节记录还是100,000字节记录?如果您希望按该字段/列进行查询,则需要字段/列的索引,除非您使用map / reduce完成所有工作。用户记录的数量是否会保持在100毫米(1台服务器可能就足够了),或者每年会增长100%(可能是多台服务器随着时间的推移增加新服务器)。
如何访问更新记录取决于您是否需要实时更新它们或是否可以运行批处理作业。更新是每分钟,每小时还是每月?
我强烈建议你做一些实验。你有没有做过任何测试?这将为您提供问题的背景,这将带来更客观的问题和答案。您不太可能根据自己的问题“白板化”解决方案。