我的数据如下:
00000000001
:`12341234 ... 12341234'
基本上是与大量数字(少于100个字符)相关联的唯一ID值。
我希望存储数百万的数百万甚至100万这些数据,只需要指向大数字字符串的ID。我想知道最节省空间的方式是什么,我也想记住快速查找时间。我希望我的应用程序被赋予类似550,000
的数字,并能够快速引用与其相关的大量数字。
我已经将开源数据库视为一个选项(MySQL),我也考虑过像JSON或XML这样的东西。还有其他选择吗?什么是最好的?
我不确定的原因是因为数据非常简单。我害怕使用某些数据库,因为有些是关系型或面向对象的,但我不需要这些功能(这里可能有开销)。我也担心我的数据对于像JSON这样的东西来说太简单和重复了,因为我觉得通过一遍又一遍地重复"id" :
和"bignumber" :
会消耗大部分文件空间。
有什么建议吗?
答案 0 :(得分:3)
看起来id和value都是整数值,因此将它们存储为二进制数据(而不是字符串)可以节省大量空间。这排除了基于文本的JSON或XML。
我认为您想要使用键值存储,例如BerkeleyDB。它们允许按键快速查找(但没有别的)。
使用像SQLite这样的东西也会有很少的开销,并且允许方便的访问方法。
同样重要的是,您可以先访问数据而不将其完全读入内存(数据库引擎会为您管理数据,使用JSON或手动格式,这可能需要大量工作)。
如果您不需要网络访问(但希望处理本地文件),那么像BerkeleyDB或SQLite这样的嵌入式数据库系统似乎是最合适的。没有服务器也会大大降低设置开销。
答案 1 :(得分:3)
我认为存储此数据的最有效方法是省略“id”,只是以固定格式存储大数字。您需要大约42个字节来存储100位或更少的数字,您可以通过将“id”乘以42并直接找到存储您的号码的偏移量来轻松查找您所追求的数字。
答案 2 :(得分:1)
MySQL或类似的将为您处理很多细节。 SQLite可能也很好,因为您不需要那么多功能。
整数字段和文本字段可以使用,但您可以根据需要将更多数据打包到二进制blob中进行打包和解包。我可能会将它们编码为两位数到一个字节,但如果你想处理位移等等,你可以做得更好。
正如@gordy建议的那样,如果你的所有值都有很多数字,那么对于所有内容,你可能会做更好的固定行大小,因为查找速度会更快。如果尺寸更重要,请使用可变宽度。
如果您的数据是只读的,您可以尝试使用MySQL的存档表类型进行压缩。
http://dev.mysql.com/doc/refman/5.1/en/archive-storage-engine.html
答案 3 :(得分:0)
任何旧数据库都应该可以正常工作;将BDB(或更现代的版本,Redis,Tokyo Cabinet)形成标准的sql DB,如MySQL或Postgres。我自己最喜欢的是H2,这是一个简单但性能相当高且可嵌入的SQL DB。
对于基本存储选择会更大; XML / JSON(通常使用gzip压缩)很好,但是如果你确实需要id查找,那么数据库就更有意义了。