存储大量小记录以进行亚毫秒级延迟检索
Storing lots of small records for sub millisecond latency retrieval
我有一个用例,需要能够从某个商店检索文档(~1.5kb),如果可能的话,延迟小于 1 毫秒。商店将包含至少 2-3 百万个此类文档。
示例文档
{"name": "NameOfTheItem", "city": "Seattle", "state": "WA", "postCode": "99332", "country": "USA"}
访问模式
- 我的所有查找都将严格基于
name
字段。
- 我不需要高性能写入
问题
- 对于这种大小的文档,在存储前压缩文档并在检索时解压缩是否有意义?
- 数据格式(YAML、JSON、PARQUET 等)对于这个大小的文档是否重要?如果是这样,您是否有任何参考可以帮助我确定正确的格式?
- 我有哪些商店可以帮助我实现亚毫秒检索?
对于非常快的访问时间,您希望将数据保存在内存中和类似 HashMap 的数据结构中,以实现 O(1) 读取复杂度。我刚刚计算出我们总共讨论了 4-5 GB 的文档。一些合理的设置应该能够保持我的记忆。
不要考虑压缩。它只针对存储大小进行了优化,但以解压缩的访问时间为代价进行了优化。正如您通过计算(文档数量 x 平均大小)看到的那样,在不压缩的情况下将所有内容保存在内存中应该没有问题。
我希望您也需要持久性,因此您也应该将数据存储在磁盘(例如数据库)和内存缓存中。
我有一个用例,需要能够从某个商店检索文档(~1.5kb),如果可能的话,延迟小于 1 毫秒。商店将包含至少 2-3 百万个此类文档。
示例文档
{"name": "NameOfTheItem", "city": "Seattle", "state": "WA", "postCode": "99332", "country": "USA"}
访问模式
- 我的所有查找都将严格基于
name
字段。 - 我不需要高性能写入
问题
- 对于这种大小的文档,在存储前压缩文档并在检索时解压缩是否有意义?
- 数据格式(YAML、JSON、PARQUET 等)对于这个大小的文档是否重要?如果是这样,您是否有任何参考可以帮助我确定正确的格式?
- 我有哪些商店可以帮助我实现亚毫秒检索?
对于非常快的访问时间,您希望将数据保存在内存中和类似 HashMap 的数据结构中,以实现 O(1) 读取复杂度。我刚刚计算出我们总共讨论了 4-5 GB 的文档。一些合理的设置应该能够保持我的记忆。
不要考虑压缩。它只针对存储大小进行了优化,但以解压缩的访问时间为代价进行了优化。正如您通过计算(文档数量 x 平均大小)看到的那样,在不压缩的情况下将所有内容保存在内存中应该没有问题。
我希望您也需要持久性,因此您也应该将数据存储在磁盘(例如数据库)和内存缓存中。