问题标签 [kyotocabinet]
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.
kyotocabinet - 1亿条记录后,Kyoto TreeDB插入速度减慢
我在京都 TreeDB 中插入记录。键只是一个计数器,我递增并且值是固定的。
在 1 亿条记录之后,插入逐渐变慢。有没有人尝试在京都内阁插入更多记录?
nosql - 京都内阁和多个流程?
我已经阅读了文档,发现很少有关于访问单个 kyotocabinet 数据库的多个进程(读取器和写入器)。看来您可以创建多个读取器,但除非您指定 ONOLOCK 多个写入器将阻止尝试打开数据库。任何人都可以阐明这是如何工作的或是否可能?我知道KyotoTycoon 是一种选择,但我特别对KyotoCabinet 感到好奇。
ruby - PostgreSQL 连接表到键值存储(如京都内阁)
我不确定这是什么类型的问题。
京都内阁支持哪些导入格式?
例如,我t
在 PostgreSQL 数据库中有一个联结表,多对多关系。规模t
约为2.85亿。
什么是最简单、最快捷的导出方式,然后导入到京都内阁等关键价值商店?
所以我最终得到:
我的首选语言是 Ruby。
c++ - 京都内阁TreeDB:内存使用量增长失控,直到数据库关闭
我一直在尝试使用kyotocabinet TreeDB(MSVC10 build)并偶然发现了一个奇怪的内存问题:基本上,在每次数据库写入时,内存使用量都会增加,并且在数据库关闭之前它不会下降。
测试代码如下所示:
当然,我可以在添加每条记录时打开/关闭数据库,但这会带来巨大的延迟(大约 1 秒),这对于我的任务来说是不可接受的。另外,这个问题在 HashDB 中不会出现,但是我不能真正使用 HashDB,因为我偶尔需要按键顺序访问。
我尝试过更改调整参数(tune_page_cache、tune_buckets、tune_page),但没有成功。请有人提示我在这里缺少什么?我需要存储不可预测数量的 100KB-10MB 大小的记录并在 32 位系统上运行它。
kyotocabinet - 如何提高kyotocabinet Hash Database的时间有效性
在kyotocabinet的主页上,我看到用哈希数据库存储数据需要0.9秒,但在我的测试中,存储一百万个数据大约需要13秒。我在http://fallabs.com/kyotocabinet/spex.html#tutorial发现一些参数可以提高效果,但是在我尝试之后。似乎没有效果。(数据大小为120字节)我怎样才能提高效果???
python - 检查大量字符串是否存在的有效方法
我有一组 100+ 百万个字符串,每个最多 63 个字符。我有很多磁盘空间和很少的内存(512 MB)。我需要单独查询存在,并且不存储其他元数据。
我事实上的解决方案是 BDB btree。有没有更好的选择?我知道 leveldb 和京都内阁,但不够熟悉以确定优势。
indexing - 使用键值数据库作为具有持久索引的集合
由于以下内容有点长:这是 tl;dr; 版本:是否存在用于快速键和值查找的键/值最佳实践,例如具有持久索引的基于哈希的集合?
我对键值数据库的世界很感兴趣,但到目前为止还没有弄清楚如何有效地实现以下用例:
假设我们想要序列化一些数据并通过一个持久的、唯一的整数索引在其他地方引用它们。因此例如:Key = unsigned int,Value = MyData。
数据库应具有快速键查找并确保 MyData 是唯一的。
现在,当我在我的数据库中插入一个新值时,我可以为其分配一个新的索引键,例如数据库的当前大小或防止删除项目后发生冲突,我可以在外部保留一些计数器。
但是我如何确保我不会将相同的 MyData 值插入到我的数据库中?到目前为止,在我看来,键值数据库似乎无法有效地实现这一点 - 这是正确的吗?即我不想迭代整个数据库只是为了确保 MyData 值不在那里......
那么,实现这一点的最佳做法是什么?
背景:我在 KDevelop 上工作,我们使用上面的代码分析缓存。我们实际上有上述用例1的自定义实现。如果您对内部结构感兴趣,请搜索 Bucket 和 ItemRepository,有关 ItemRepository 的示例性用法,请参见2。
但是您可能会同意,这段代码很难理解,因此也很难维护。我想将其性能与可能导致代码更简单的替代解决方案进行比较——但前提是它不会导致严重的性能损失。考虑到围绕 OpenLDAP MDB、Kyoto Cabinet 和 LevelDB 等键值存储性能的炒作,这就是我想开始的地方。
我们在 KDevelop 中所拥有的——据我所知——基本上是一种混合的磁盘/内存哈希映射,它会定期保存到磁盘(这当然会在崩溃等情况下导致重大数据损坏)。 )。项目根据它们的散列值存储在一个位置,只要散列函数速度快,这当然也允许相对快速的值查找。增加的转折是您还可以获得某种持久性数据库索引,可用于非常有效地查找项目。
所以——长话短说——如何用一个键/值数据库来做到这一点,比如 LevelDB、Kyoto Cabinet、OpenLDAP MDB——你说的吗?
java - kyotocabinet java绑定安装错误
我正在尝试安装 kyotocabinet 的 java 绑定。我使用mac端口安装kyotocabinet(1.2.76)。然后我下载并解压了kyoto java binding 1.24。
接下来,我将当前目录设置为解压缩京都 java 绑定的位置。
现在的问题是:当我运行 ./configure 时,我收到错误“configure: error: kccommon.h is required”。我该如何解决这个问题?
database - 什么数据库在写入磁盘时真的很快?
我正在开发一种生物学软件,该软件会生成数百万个长度通常大于 30 个字符的字符串(由核苷酸碱基组成,AGCT)。写成C。
我需要一个数据库以足够快的速度将这些数据存储在磁盘上,以免造成整个软件变慢的瓶颈,并且不会消耗过多的 RAM。此外,我需要它在我的应用程序中完全链接。我不想强迫我的用户安装 SQL 服务器或类似的东西。
我已经尝试过 hamsterDB、SQLite、Kyoto Cabinet 和 MapDB,但都没有成功。问题是我需要至少以大约 50k 操作/秒的速度从数据库中插入或更新数据。通过一些优化,我让 SQLite 变得更快。它达到 18k 操作/秒(它使用同步关闭、journal_mode 关闭、事务、ignore_check_constraints 开启、cache_size 为 500.000 和预编译语句)。
每个序列被分类为 A 或 B,我需要知道每种序列有多少。现在我正在使用序列作为键,并为 A 类型添加一个计数器,为 B 类型添加另一个计数器。在 SQLite 数据库上,我使用如下列和命令:
这比简单的 INSERT INTO 慢,但如果 seq 已经存在于 DB 上,我只需要增加其中一列。
使用京都内阁我得到了非常高的速度,但它只支持字符串记录,我需要添加和更新整数来计算我有多少 A 和 B。
有谁知道另一个可以满足我对写入速度和记录灵活性的需求的好数据库?
tokyo-cabinet - 京都内阁 HashDB 插入不是 O(1)
我正在试验京都内阁 HashDB。我的数据库将增长到 110 TB。键是 20 字节,值是 128 KB。我正在尝试插入大约 5 亿条记录。这是迄今为止我得到的最好的表现:
时间以秒为单位。'n' 是输入的 10000 条记录的数量。例如,第 10000 条记录需要 1 秒。第 5 条 10000 条记录耗时 5 秒,以此类推。如您所见,在输入大约 200 万条记录后性能开始下降。我创建了存储桶编号设置为 70 亿的数据库,其他一切都是默认设置。我正在使用 C/C++ 库,并将内存映射容量设置为 30 GB(我有 32 GB RAM)db.tune_map(30LL << 30);
。
有什么方法可以将性能线性保持在每 10000 条记录大约 9-10 秒?