- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章快速了解python leveldb由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文主要是对leveldb进行一个简单的介绍及使用Python语言对其进行操作的代码示例,具体如下.
leveldb 是google实现的一种非常高效的key-value数据库。key-value数据库中,redis是比较知名且好用的,但它是一个内存数据库,而leveldb只需要少量的内存,但速度依然很快,美中不足的是,没有网络服务封装,这样一来就只能单机使用,如果你实力足够强,也可以自己封装一个.
python版本的leveldb安装很简单,pip install leveldb 。
接下来重点介绍使用方法.
一 、 读写 。
1
2
3
4
5
6
|
def
single_operate():
db
=
leveldb.LevelDB(
'./data'
)
db.Put(
'foo'
,
'东升'
)
print
db.Get(
'foo'
)
db.Delete(
'foo'
)
print
db.Get(
'foo'
)
|
新建数据库很方便,如果这个目录已经存在就会直接打开,没有的话就会新建。示例中给出了添加,删除,和获取的方法,注意,是没有修改操作的.
二 、 遍历 。
如何遍历数据呢,也非常方便,你可以指定开始的key和结束的key,也可以指定顺序,是否带value 。
1
2
3
4
5
6
|
def
test_iter():
db
=
leveldb.LevelDB(
'./data'
)
for
i
in
xrange
(
10
):
db.Put(
str
(i),
'string_%s'
%
i)
print
list
(db.RangeIter(key_from
=
'2'
, key_to
=
'5'
))
print
list
(db.RangeIter(key_from
=
'2'
, key_to
=
'5'
,reverse
=
True
))
|
1
2
3
4
5
6
7
8
9
|
def
iter_key_values():
db
=
leveldb.LevelDB(
'./data'
)
for
i
in
xrange
(
10
):
db.Put(
str
(i),
'string_%s'
%
i)
keys
=
list
(db.RangeIter(include_value
=
False
))
print
keys
keys_values
=
list
(db.RangeIter())
print
keys_values
|
3、 批量操作 。
如果我对数据库有一大批操作,每一次都和数据库进行交互,其实挺浪费性能的,因此像mongodb,redis都提供了批量操作的方法,leveldb也是如此。下面是一个清空数据库的例子 。
1
2
3
4
5
6
|
def
clear_db():
db
=
leveldb.LevelDB(
'./data'
)
b
=
leveldb.WriteBatch()
for
k
in
db.RangeIter(include_value
=
False
, reverse
=
True
):
b.Delete(k)
db.Write(b)
|
b.Delete(k)并没有真正的删除数据,而是在db.Write(b)时执行所有的操作 。
4、 快照 。
创建快照非常简单,美中不足的是,再次加载数据库以后,没有方法找到之前创建的快照,难道已关闭这些快照就都不见了,这这样的快照还有什么意思呢,也许只有python版本的快照是这样的吧 。
1
2
3
4
5
6
7
8
9
10
|
def
test_snapshot():
db
=
leveldb.LevelDB(
'./data'
)
db.Put(
'foo'
,
's1'
)
s1
=
db.CreateSnapshot()
db.Put(
'foo'
,
's2'
)
s2
=
db.CreateSnapshot()
print
db.Get(
'foo'
)
print
s1.Get(
'foo'
)
print
s2.Get(
'foo'
)
|
总结 。
以上就是本文关于快速了解python leveldb的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持! 。
原文链接:http://blog.csdn.net/kwsy2008/article/details/52326204 。
最后此篇关于快速了解python leveldb的文章就讲到这里了,如果你想了解更多关于快速了解python leveldb的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
读取快照是 leveldb 的完全线程安全操作吗? 具体来说, 一个线程读取 leveldb 数据库的快照,而另一个线程在同一数据库上读/写是否线程安全?那么另一个线程可能在读取时同时关闭数据库或删除
LevelDB 中是否有最大键数限制或生产力的键数限制(如 Kyoto Cabinet:记录数决定了在创建数据库之前必须计算的桶数;如果记录数超过该限制,数据库将失去生产力,但继续工作)? 最佳答案
我认为只有两个级别(级别0和级别1)就可以了,为什么LevelDB需要级别2,级别3等等? 最佳答案 我将向您指出一些关于 LevelDB 及其底层存储结构的文章的方向。 所以在documentati
我正在研究一种设计,其中数据的二级索引将使用键中的所有信息构建,而在值方面不需要任何信息。这可能会导致问题吗? 我不是问技术上是否可以有空白值。是否存在任何结构后果,例如:添加排序键可能会导致某些树结
当我尝试删除 leveldb 实例时,我得到了一些非常烦人的断言,我不确定为什么会这样! 断言发生在 version_set.cc 中文件: void VersionSet::AppendVersio
我最近在我的项目中添加了几个嵌入式框架,似乎 cocoapods 安装和构建没有问题,但是当我尝试在模拟器中运行时,我得到了这个: dyld: Library not loaded: @rpath/l
假设您不知道 leveldb 数据库中的确切键。 我尝试插入 3 个键并在键范围内使用 GetApproximateSizes,结果始终为零。 那么如何检查 leveldb 中是否有任何键呢? 最佳答
是否有一些如何仅更改 leveldb 数据库中键的值? 我已经有一个包含 1800 万行的数据库,我想更改键以添加前缀。 我在 node.js 中使用 leveldb。但任何解决方案都必须适合。 我已
在 LevelDB 中生成自增键的好的策略是什么?我的目标是能够按照键的插入顺序对其进行迭代。 最佳答案 两种方法: 使用默认比较器,但使用函数将索引键“1”转换为“000000001”,将“20”转
rocksDB 1 级中的所有键都已排序。因此我们可以在这个关卡中快速获得 key 。为什么rocksDB还需要将level 1的文件压缩到level 2? 我在 LevelDB 的 doc 上找到了
我对 LevelDB 还很陌生。我需要“回滚到特定状态”之类的东西,LevelDB 支持吗?经过一番搜索,我知道LevelDB不支持事务,但支持快照。我可以将数据库恢复到快照吗? 我的需求是这样的:
在 LevelDB 中生成自增键的好的策略是什么?我的目标是能够按照键的插入顺序对其进行迭代。 最佳答案 两种方法: 使用默认比较器,但使用函数将索引键“1”转换为“000000001”,将“20”转
我想创建一个工具来删除 Rocksdb 或 leveldb 中早于几天的所有数据,但我不知道如何启动它。 最佳答案 RocksDB 有一个特定的数据库,名为 Date_tiered DB .您可以指定
rocksDB 1 级中的所有键都已排序。因此我们可以在这个关卡中快速获得 key 。为什么rocksDB还需要将level 1的文件压缩到level 2? 我在 LevelDB 的 doc 上找到了
本文主要是对leveldb进行一个简单的介绍及使用Python语言对其进行操作的代码示例,具体如下。 leveldb 是google实现的一种非常高效的key-value数据库。key-value
是否可以将多个键映射到同一个值?如果没有,是否有解决此功能的方法? 最佳答案 这是不可能的。我使用的一种解决方法是让第二个键上的值成为指向主键的指针。也就是说,第二个键的值是主键。 特别是,我制作了一
LevelDB key 是否有 key 长度限制? 我想以 url 为键保存数据。所以这个网址可以很长 例如http://veryveryveryveryveryveryveryveryveryver
有人可以告诉我这个吗: 尝试在node.js实例中使用levelDb来存储name键和ID字符串,我希望能够检查ID 已经在数据库中,所以... 查看documentation我不知道我做错了什么。
我正在寻找一种有效的方法来使用 leveldb 来实现键枚举器以按键前缀进行迭代。键是字节数组(并且数据库使用默认字节数组比较器,因此具有特定前缀的所有键都按顺序存储/检索),我希望我的迭代器能够采用
我正在使用 LevelDB from Java via JNI . 我想提供一个数字(整数)键,并能够按照该键的顺序迭代数据库。我遇到困难的地方是理解 LevelDb 的默认比较器实际上是如何工作的,
我是一名优秀的程序员,十分优秀!