我有~~ 20亿的事件。事件包括:一个密钥(SSN),一个日期和有关该事件的信息。 我有5种类型的活动。
读取模式:我需要从单个密钥中获取所有事件,而不是特定日期。
写入模式:每天只需一次批量加载。
想象一下数据库:
SSN;date(yyyymmdd);info
1;20140101;A
1;20140105;B
2;20140106;A
1;20140103;C
所以如果我的查询是:(SSN =“1”和date =“20140104”)我需要得到:
1;20140101;A
1;20140103;C
我的第一个方法是:
有没有人在这种方法中看到性能问题? 虽然,我的密钥是使用日期组成的,但我认为它不会导致“单调递增值”,因为我首先拥有SSN。
答案 0 :(得分:0)
这是一个完美的设计。对于读取扫描,您将使用startKey = sss + 0和endKey = ssn + date。您需要为用户标识符字段(SSN-9)分配固定数量的符号。行键按字典顺序排序。假设均匀分布,则每个SSN中20个/ 420个SSN总数= 47个事件。这并不多,但我会考虑索引大小和所需的任何优化。
事件是时间序列。您可能对以下摘要感兴趣。它有3个用例:aws transcoder overwrite files on s3
答案 1 :(得分:0)
根据所需的读/写模式,设计很好。 OpenTSDB实际上使用类似schema来存储时间序列数据(用于繁重的实时指标,传感器数据等...)
你确实有单调增加的密钥(给定SSN),但无关紧要有两个原因:
一条小建议: