问题标签 [leveldb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
2329 浏览

c++ - 增加字符串中的数字

我必须将增加的 ID 作为 key 保存到 levelDB 数据库中。所以我得到的(以及我必须给 levelDB 的)是一个字符串。

问题:有没有一种优雅的方法来增加保存在字符串中的数字?

例子:

干杯!

PS:宁愿继续使用标准编译,即没有 C++11。

0 投票
2 回答
6686 浏览

database - 对于 LevelDB,我如何才能获得与声称的“官方”性能报告相同的随机写入性能?

leveldb的官方网站之一(http://code.google.com/p/leveldb/),有一个性能报告。我粘贴如下。

以下来自官方 leveldb 基准测试

这是包含的 db_bench 程序运行的性能报告(带有解释)。结果有些嘈杂,但应该足以获得大致的性能估计。

设置

我们使用包含一百万个条目的数据库。每个条目都有一个 16 字节的密钥和一个 100 字节的值。基准使用的值压缩到原始大小的一半左右。LevelDB:1.1版

CPU:4 x Intel(R) Core(TM)2 四核 CPU Q6600 @ 2.40GHz

CPU缓存:4096 KB

密钥:每个 16 字节

值:每个 100 字节(压缩后 50 字节)

条目:1000000

原始大小:110.6 MB(估计)

文件大小:62.9 MB(估计)

写入性能

“填充”基准以顺序或随机顺序创建一个全新的数据库。

“fillsync”基准在每次操作后将数据从操作系统刷新到磁盘;其他写操作将数据留在操作系统缓冲区缓存中一段时间​​。“覆盖”基准执行随机写入,更新数据库中的现有密钥。

填充序列:1.765 微秒/运算;62.7 MB/秒

填充同步:268.409 微/操作;0.4 MB/秒(10000 次操作)

填充随机数:2.460 微秒/运算;45.0 MB/秒

覆盖:2.380 微秒/操作;46.5 MB/秒

上面的每个“操作”对应于单个键/值对的写入。即,随机写入基准大约每秒写入 400,000 次

以下来自我的 leveldb 基准测试

我为 leveldb 做了一些基准测试,但写入速度比报告低 100 倍。

这是我的实验设置:

  1. CPU:英特尔酷睿2双核T6670 2.20GHz
  2. 3.0GB内存
  3. 32 位 Windows 7
  4. 无压缩
  5. options.write_buffer_size = 100MB
  6. options.block_cache = 640MB

我所做的很简单:我只放了 200 万个 {key, value} 并且根本没有读取。键是一个包含 20 个随机字节的字节数组,值也是一个包含 100 个随机字节的字节数组。我不断地新随机 {key, value} 200 万次,没有任何其他操作。

在我的实验中,我可以看到写作的速度从一开始就下降了。即时速度(测量每 1024 次写入的速度)在 50/s 到 10, 000/s 之间波动。我对 200 万对的整体平均写入速度约为 3,000/s。写入的峰值速度为 10, 000/s。

由于报告声称写入速度可以是 400、000/s,我的基准测试的写入速度慢了 40 到 130 倍,我只是想知道我的基准测试有什么问题。

我不需要在这里粘贴我的测试代码,因为它非常简单,我只有一个循环 200 万次,在循环内,对于每次迭代,我生成一个 20 字节的密钥和 100 字节的值,然后将它们放入 leveldb 数据库。我还测量了 {key, value} 生成所花费的时间,它花费了 0 毫秒。

谁能帮我这个?如何使用 leveldb 实现 400、000/s 的写入速度?我应该改进哪些设置?

谢谢

而且

我刚刚在我的机器上运行了官方的 db_bench.cc。它比报告慢 28 倍。

我认为当我使用他们自己的基准程序时,我的基准程序和他们的基准程序之间的唯一区别是机器。

0 投票
4 回答
11713 浏览

c++ - 字符串(从 substr)转换为 unsigned int

我有一个字符串,它实际上包含一个数字和一个字符串,以 分隔,,例如"12,fooBar"

我想将它放入单独的变量中,即数字 intounsigned int myNum和字符串 into std::string myStr

我有以下代码片段:

这产生12 and 1. 我在这里错过了什么?2第二部分发生了什么?

注意:我将问题隔离到这段代码。我需要c_str()将它传递atoiunsigend int. 在这里我不想打印第二部分。

更新:我实际上是从 levelDB 得到的字符串Get。如果我像放在这里一样放一个测试字符串,它就可以工作。

0 投票
1 回答
290 浏览

stream - 从流中加载 leveldb

有没有办法从数据流中加载 leveldb 存储?

如果我要获取 leveldb 实例的流并将其作为清单资源流放入 DLL 中,那么当我从我的 DLL 中检索清单资源时,我是否有办法从该流中加载该数据库?本质上,我正在寻找一种方法来构建、保存和稍后加载 leveldb,而无需写入磁盘上的物理文件。

提前感谢您提供任何有用的信息。拉贾。

0 投票
5 回答
998 浏览

sqlite - > 每秒 60K 插入要从 Java 使用的键值存储

正在开发自定义解决方案,我需要以每秒 60K 记录的速度将大量数据存储到文件/数据库中。该数据是传入连续流的结果。

  1. leveldb - 不能从多个 java 进程同时访问它

  2. berkleydb/kyoto cabinet:禁止商业许可

  3. sqlite :尝试了 sqlite4java,但它不支持批量操作并且没有以所需的速度执行。还尝试了 jdbc 包装器(http://www.zentus.com/sqlitejdbc/),这也没有以所需的速度执行。

有人可以建议我解决方案,它只允许我将数据转储到 db/file 并且可以被多个进程(+线程)访问吗?

0 投票
1 回答
832 浏览

database - LevelDB 下载问题

任何人都可以帮助我,因为我发现它是空的,我可以从那里下载 Java-Windows 的 LevelDB吗?任何如何安装和运行的链接都会对我有所帮助。

0 投票
2 回答
6221 浏览

iterator - LevelDB:实现迭代器以按键前缀枚举

我正在寻找一种有效的方法来实现使用 leveldb 通过键前缀迭代的键枚举器。键是字节数组(数据库使用默认字节数组比较器,因此具有特定前缀的所有键都按顺序存储/检索),我希望我的迭代器能够采用键前缀并仅返回具有键的数据字首。

我是否必须使用或继承默认的数据库迭代器,寻找范围内的第一个键(当然我需要知道它是什么),然后验证并返回以前缀开头的每个切片(通过覆盖 movenext 或其他东西)? 还是有更有效的方法来实现这一点?

让我知道是否有人已经解决了这个问题并且可以分享代码或总体思路。我正在从 C++/CLI 尝试这个,但任何语言的实现都会有所帮助。

谢谢。-raj。

0 投票
3 回答
12919 浏览

go - 如何在 Go 中使用 LevelDB?

http://code.google.com/p/leveldb/看来,将 LevelDB 与 Go 一起使用似乎并不明确或容易。但我真的很想知道如何在 Go 中使用它。

谁能给我一个线索?

0 投票
1 回答
851 浏览

open-source - 如何从 cassandra 或 hbase 中提取 leveldb 类型的数据存储(sstable + memtable)?

LevelDB 是来自 Google 的一个非常有趣的 C++ 数据存储。我正在 Java 世界中寻找类似的东西(坦率地说,这样我可以更好地理解代码,更容易在 Windows 上运行,等等)。

我了解 Hbase 和 Cassandra 也包含相同的基本技术:用于文件存储的 sstable、用于内存存储的 memtable(在排序和写入磁盘之前)、某种压缩、定期压缩等。

是否有任何努力从更大的项目中提取这项技术?我自己已经开始查看代码库(主要是 Cassandra),但这些显然不是微不足道的项目。哪个项目有更多的模块化代码?

期待大家的指点!

0 投票
2 回答
1153 浏览

leveldb - 如果值为空且只有一个键,leveldb 是否存在结构问题?

我正在研究一种设计,其中数据的二级索引将使用键中的所有信息构建,在价值方面不需要任何东西。这可能会导致问题吗?

不是在问技术上是否可以有一个空白值。是否有任何结构性后果,例如:添加排序键会使某些树结构失衡?(我不是说 leveldb 使用树,只是想一个类比 ;-))

即:说“主记录”看起来像(空值作为分隔符)

  • key = uniqueTableID \0 uniqueRowID
  • value = 一些字段的集合

典型单值字段的二级索引如下所示:

  • key = uniqueFieldID \0 keyValue \0 uniqueRowID

允许通过部分键 [uniqueFieldID \0 keyValue] 进行迭代,并且如果主记录被删除或键值更改,它还可以轻松找到这些键并删除它们,从主记录的 uniqueRowID 开始工作。因此,可能有多个键值以相同的 uniqueRowID 结尾,但对于以 uniqueFieldID 开头并以 uniqueRowID 结尾的特定组合只能是一个键

唯一的一点是,我不需要在该对的值侧放置一个值。

我对这个概念设计很满意,只是看看是否有人能发现其中的漏洞。例如,如果它会扭曲 leveldb 内部结构导致性能问题。

我希望在一个特定的应用程序中会有数万个这样的键。

作为我们可能想要存储的值的示例,文本字段的辅助词索引可能如下所示:

  • key = uniqueFieldID \0 keyValue \0 GUID
  • value = 单词出现的计数,或者如果扫描大 blob 成本高,则可能是偏移列表