java - 将许多有界整数打包成一个大的单个整数

标签 java integer decode encode pack

我必须在数据库中存储数百万个条目。每个条目都由一组唯一的整数标识符来标识。例如,一个值可以由一组 10 个整数标识符来标识,每个整数标识符都小于 1 亿。

为了减小数据库的大小,我想到了使用单个 32 位整数值的以下编码。

Identifier 1: 0 - 100,000,000
Identifier 2: 100,000,001 - 200,000,000
.
.
.
Identifier 10: 900,000,001 - 1,000,000,000

我正在使用Java。我可以编写一个简单的方法来编码/解码。用户代码不必知道我在获取/存储期间进行编码/解码。

我想知道的是:实现这种编码/解码最有效(最快)和推荐的方法是什么。一个简单的实现将执行大量的乘法/减法。

是否可以使用移位(或按位运算)并选择不同的分区大小(每个段的大小仍然必须接近1亿)?

我愿意接受任何建议、想法,甚至完全不同的方案。我想利用整数标识符有界这一事实来大幅减少存储大小,而不会明显影响性能。

编辑:我只是想补充一点,我浏览了此论坛上发布的一些答案。常见的解决方案是拆分每个标识符的位。如果我为每个标识符使用 2 位,总共 10 个标识符,那么我的标识符范围就会受到严重限制。

最佳答案

听起来你想将多个 0...100m 的整数值打包到一个 32 位整数中?除非您省略了可以更有效地存储这些 0...100m 值的重要信息,否则根本没有办法做到这一点。

ceil(log2(100m)) = 27bit,这意味着您只有 5 个“备用位”。

关于java - 将许多有界整数打包成一个大的单个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10091727/

相关文章:

两种不同编码类型的PHP字符串比较

java - 计算三角晶体

java - 如何查找与 .cache.html 文件关联的 java 文件

mysql - 1292 截断了不正确的 INTEGER 值

python - 包含多个条件的列表

python - 如何使用 winreg 解码注册表值

java - 如何将 Pdf 转换为 base64 并编码/解码

java - if 语句 "not a statement"?

java - 想要从 DWR 请求打开 PDF 文件

php - 在 PHP 中定义无符号 CHAR