java - 存储大量小记录以进行亚毫秒延迟检索
问题描述
如果可能的话,我有一个用例需要能够从延迟小于 1 毫秒的存储中检索文档(~1.5kb)。该商店将包含至少 2-3 百万份此类文档。
样本文件
{"name": "NameOfTheItem", "city": "Seattle", "state": "WA", "postCode": "99332", "country": "USA"}
访问模式
- 我所有的查找都将严格基于该
name
字段。 - 我不需要高性能的写入
问题
- 对于这种大小的文档,在存储之前压缩文档并在检索时解压缩是否有意义?
- 数据格式(YAML、JSON、PARQUET 等)对于这种大小的文档是否重要?如果是这样,您是否有任何参考资料可以帮助我确定正确的格式?
- 我有哪些商店可以帮助我实现 sub ms 检索?
解决方案
对于非常快的访问时间,您希望将数据保存在内存和类似 HashMap 的数据结构中,以实现 O(1) 读取复杂性。我刚刚计算出,我们总共谈论的是 4-5 GB 的文档。一个合理的设置应该能够保持我的记忆。
不要考虑压缩。它仅优化存储大小,但优化了解压缩的访问时间成本。从计算中可以看出(文档数 x 平均大小),将所有内容保存在内存中而不进行压缩应该不是问题。
我希望您还需要持久性,因此您应该将数据也存储在磁盘(例如数据库)和内存缓存中。
推荐阅读
- mysql - 选择链中具有参考 ID 的所有查询
- mysql - 将 Innodb 表复制到内存表时 MySQL 内存不足
- deployment - 找不到将 ASP.NET MVC5 部署到 IIS7 程序集
- vb6 - VB6中毫秒精度的unix时间戳?
- python-3.x - 为什么这在我的 requests.get 变量上显示为语法错误?
- reactjs - 如何将事件添加到输入反应
- graphql - 左连接只是使用连接怪物获取数据的一种方法吗?
- java - 当 View 设置为 GONE 时未调用 Android onScrolled
- ms-office - Office.CoercionType.Image 的可用性
- node.js - Electron i32 app 找不到 sqlite3 模块