- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我很难在我的 SSD 上存储数亿个 16/32 字节的键/值对和哈希数组。
With Kyoto Cabinet:正常工作时,它以 70000 条记录/秒的速度插入。一旦下降,它就会下降到 10-500 条记录/秒。使用默认设置,丢弃发生在大约一百万条记录之后。查看文档,这是数组中桶的默认数量,所以这是有道理的。我将这个数字增加到 2500 万,事实上,在大约 2500 万条记录之前它工作正常。问题是,一旦我将桶的数量推到 3000 万或更多,插入率从一开始就下降到 10-500 条记录/秒。 Kyoto Cabinet 没有设计成在创建数据库后增加桶的数量,所以我不能插入超过 2500 万条记录。
1/为什么一旦桶数超过 25M,KC 的插入率就会变得很低?
使用 Berkeley DB:我得到的最好速度比 KC 略低,接近 50000 条记录/秒,但还可以。使用默认设置,就像 KC 一样,速度在大约一百万条记录后突然下降。我知道 BDB 旨在逐渐扩展其存储桶数量。不管怎样,它尝试增加初始数量,使用 HashNumElements 和 FillFactor,但任何这些尝试都使情况变得更糟。所以我仍然无法使用 DBD 插入超过 1-2 百万条记录。我尝试激活非同步事务,尝试不同速率的检查点,增加缓存。没有任何改进下拉菜单。
2/什么会导致 BDB 的插入率在插入 1-2 百万次后下降?
注意:我正在使用 java,当速度下降时,CPU 使用率降低到 0-30%,而在正常速度下工作时则为 100%。
注意:停止进程并恢复插入不会有任何改变。所以我认为这与内存限制或垃圾回收无关。
谢谢。
最佳答案
下面是我如何在 KC 遇到写入限制的情况下设法存储数十亿条记录。
我费了好大劲,还是没有解决Kyoto Cabinet和Berkeley DB的问题。不过,我想出了一个使用 Kyoto Cabinet 的有趣解决方法。
我注意到我不能在一个 KC 文件上写入超过 25M 的记录,但是读取没有这样的限制——它总是很快,不管数据库的大小。我找到的解决方案是为每 25M 条新记录创建一个新的 KC 文件(一个新的数据库)。这样,读取发生在许多 KC 文件上并且仍然很快,而写入仅发生在最后创建的文件上并且速度也很快。唯一剩下的问题是允许更新/删除以前文件的记录。为此,我复制了 SSTables 方法,即:
注释:
关于java - 京都内阁/伯克利 DB : Hash table size limitations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13054852/
好吧,我对我的页面发生的事情有点困惑。我在底部有页码, table 上摆满了 23 种不同的元素。 每个页面应一次显示 5 个项目。我显示的页面发送了一个带有 pagenumber = 不管怎样的 g
几周前我开始学习 Ada。我知道 limited 在某些情况下声明了一个有限类型,不允许复制对象 来自 Ada Reference Manual 2012 7.5 1/2 A limited type
我想按 DESC 选择日期并限制为最后 3 个,然后我需要基本上翻转最后 3 个结果,以便它们按 ASC 排序 任何帮助将不胜感激,我正在使用 postgresql 最佳答案 SELECT * FRO
SELECT * FROM mm_tfs WHERE product_slug LIKE '%football%' AND schoolid = '8' AND category_id ='2
SELECT * FROM mm_tfs WHERE product_slug LIKE '%football%' AND schoolid = '8' AND category_id ='2
我正在尝试访问按“日期”键排序的表中恒定数量的最新文档。请注意,不幸的是,日期是被实现的(不是由我......),使得该值设置为字符串,例如“2014-01-14”,或者有时“2014-01-14 2
我目前正在使用具有限制 cpu、限制内存以及保留 cpu 和内存的 Docker Swarm。 完成测试后,我想删除这些配置。我找不到任何有关如何删除这些的文章。 是否有办法通过更新来删除这些设置而不
我目前正在使用具有限制 cpu、限制内存以及保留 cpu 和内存的 Docker Swarm。 完成测试后,我想删除这些配置。我找不到任何有关如何删除这些的文章。 是否有办法通过更新来删除这些设置而不
我必须对我的数据应用分页。我通过复杂的连接查询获取数据,没有任何子查询,只有简单的连接。 假设这个查询[这是一个非常简单的查询,我有一个比这个复杂的查询] SELECT states.state
我经常制作条形图,并将条形图的值额外包含为注释 (geom_text)。通常,我更喜欢这些值右对齐(与将标签放在条形顶部相反)。在绘制多面条形图时,我将这些值放在每个组中的最大值(我之前计算过)加上我
delivery-limit 和 x-delivery-limit 有什么区别? 当我将 x-delivery-limit 设置为 RabbitMQ 队列参数时,我可以看到它限制了我的消息重新排队尝试
delivery-limit 和 x-delivery-limit 有什么区别? 当我将 x-delivery-limit 设置为 RabbitMQ 队列参数时,我可以看到它限制了我的消息重新排队尝试
我正在使用 PostgreSQL 9.3。这应该在具有 100,000 多行的任何表上重现。 EXPLAIN ANALYZE 显示使用 LIMIT 2 扫描了更多行,但我不明白为什么。 限制 1: E
我正在尝试找出是否可以在 PHP 中全局设置和取消设置 MySQL 结果的默认限制。 一些可能看起来像的伪代码: $pdo->prepare('SELECT * FROM example'); $pd
我有下面的代码片段表 在这里我必须对投票前 3 个值求和。 假设 product_id 3030 vote 列的总和为 8.1 和 3671 总和 是 5.2 在这里,我必须获得前 3 个 produ
我正在使用全文搜索来提取行。 我根据分数 (ORDER BY SCORE) 对行进行排序,然后在前 20 行 (LIMIT 20) 中,我想对结果集进行兰德 (RAND)。 因此,对于任何特定的搜索词
帮助创建搜索条件 SELECT * FROM mlt_adr_city WHERE name LIKE "Text%" AND region_id = 59 AND id <> 0 IF (name
MySQL 查询示例: SELECT message_id, message_text FROM messages LIMIT 0 , 30 我得到的这个提示是错误的: HIN
我注意到如果我将查询限制为 1 个而不是 5 个,速度会急剧下降。 SELECT he. * FROM homematic_events he WHERE he.homematic_devices_i
我需要从我的表中获取最后一个 ID,以便我可以在另一个函数中使用它我在我的存储库中创建了这个函数,但我没有工作,它显示了一个错误: [Syntax Error] line 0, col 60: Err
我是一名优秀的程序员,十分优秀!