leveldb中的整数值
Integer values in leveldb
我想使用leveldb有效地存储整数和整数数组,在c++和python中。
对于c++中的整数,可以将整型转换为char数组。对于在c++中存储int数组和在python中存储int和int数组有什么建议吗?
您可以考虑使用像Google的protobuf (http://code.google.com/p/protobuf/)这样的库,它能够(反)序列化结构化数据。对于您提到的情况,一个重复的字段可以达到这个目的:
message List {
repeated int64 val = 1;
}
给定协议缓冲区使用的可变编码(取决于您的值范围),这可能是存储整数的有效方法。
http://code.google.com/apis/protocolbuffers/docs/encoding.html varints
如果不了解您的用例,就很难说得更多。每个数组平均要存储多少个整数?整数值的范围是什么?等。
对于c++中的int
数组,您必须将int
数组作为char*
传递给Slice类,然后您可以轻松地将其放入leveldb数据库,例如
int myArray[3] = {1,2,3};
Slice valueSlice = Slice( (const char*) myArray, sizeof(myArray) );
这对所有类型以及自定义类都基本有效,例如
MyClass* newObj = new MyClass();
Slice valueSlice = Slice( (const char*) newObj, sizeof(MyClass) );
对于python, struct可以是高效的。下面是一个使用来自leveldb-py的ctypes leveldb接口的示例,该接口将值1,2,3,4,5(作为整数数组)存储在数据库中,键为100:
import leveldb,array,struct
#this assumes 32-bit unsigned integers in machine order
value=struct.pack('p',array('I',[1,2,3,4,5]))
key=struct.pack('I',100)
db=leveldb.DB("/path/to/db", create_if_missing=True)
db[key]=value
为了提高效率,可以导入特定的函数(例如:"from struct import pack"),并使用leveldb的WriteBatch类,如果你有一堆写要做。
整数键/值可以存储在LevelDB吗?建议可能需要一个自定义比较器,但是这个特定的Python leveldb接口不支持这个。https://plyvel.readthedocs.org/en/latest/可能是更好的选择
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- C++:如何循环通过向量中的整数元素
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 序列化,没有库的整数,得到奇怪的结果
- 在一定长度后从数组中打印时缺少整数
- std::当在256字节边界上写入整数时,流的奇怪行为
- 内联程序集printf将整数解释为地址
- 是否基于数组B整数打印数组A中的整数
- 如何在C++中将整数转换为其数字数组