- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我使用 Redis 来缓存数据库插入。为此,我创建了一个列表 CACHE
,我将序列化的 JSON 列表推送到其中。在伪代码中:
let entries = [{a}, {b}, {c}, ...];
redis.rpush("CACHE", JSON.stringify(entries));
我们的想法是运行这段代码一个小时,然后再做一个
let all = redis.lrange("CACHE", 0, LIMIT);
processAndInsert(all);
redis.ltrim("CACHE", 0, all.length);
现在的问题是,每个 entries
都可能相对较大(但远低于 512MB/我读到的任何 Redis 限制)。 a、b、c
中的每一个都是一个大约 20 字节的对象,而 entries
本身可以轻松拥有 100k+ 个对象/2MB。
我现在的问题是,即使对于只有 15 个条目的非常短的 CACHE
列表,一个简单的 lrange
也可能需要很多分钟(!),即使来自 redis- cli
(我的 node.js
实际上死于 “ fatal error :CALL_AND_RETRY_LAST 分配失败 - 进程内存不足”,但这是旁注)。
列表的调试输出如下所示:
127.0.0.1:6379> debug object "CACHE"
Value at:00007FF202F4E330 refcount:1 encoding:linkedlist serializedlength:18104464 lru:12984004 lru_seconds_idle:1078
发生了什么事?为什么这么慢,我能做些什么呢?这似乎不是正常的缓慢,似乎有根本性的错误。
顺便说一下,我在相对硬核的 Windows 10 游戏机(i5、16GB RAM、840 EVO SSD,...)上使用本地 Redis 2.8.2101 (x64)、ioredis 1.6.1、node.js 0.12 .
最佳答案
Redis 擅长做很多小操作,但不擅长做少量的“非常大”的操作。
我认为您应该重新评估您的算法,并尝试将您的数据分解成更小的 block 。您不仅会节省带宽,而且不会长时间锁定您的 Redis 实例。Redis 提供了许多数据结构,您应该能够使用它们对数据进行更精细的控制。
好吧,在这种情况下,由于您在本地运行 redis,并且假设除了这段代码之外没有运行任何其他东西,我怀疑带宽或 redis 都不是问题。我更想这一行:
JSON.stringify()
是执行缓慢的主要原因。
JSON 序列化 20MB 的字符串并不简单,该过程需要分配许多小字符串,还必须遍历所有数组并单独检查每个项目。对于像这样的大物体,所有这些都需要很长时间。
同样,如果您要拆分数据并使用 Redis 执行较小的操作,则根本不需要 JSON 序列化程序。
关于Redis 对包含 15 个较大 JSON 对象(总共 20MB)的列表的查询时间超过 1 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31895772/
我有一个本地存储库,有一个大文件被意外添加到其中。现在,即时通讯几乎落后了100次提交。当我尝试推送到GitHub时,它给了我一个错误。 我需要做任何我需要做的事情,以便能够推送此存储库的其余部分。
我正在尝试分配内存NSImage*originalLocationImage; NSURL *fileURL = [NSURL fileURLWithPath:originalLocation];//
我如何以及在何处可以编辑CDH4.7中的输入拆分大小,默认情况下为64 MB,但我想将其称为1MB,因为我的MR作业运行缓慢并且我想提高MR作业的速度。我想需要编辑cor-site属性IO.file.
我创建了一个 DLL,其中包含一个从 C# 代码调用的 JNI 函数。作为长时间运行的 GUI 应用程序的 C# 应用程序多次调用该函数。 我的 JNI 函数调用 JNI_GetCreatedJava
运行 TestDFSIO 后,我得到了以下指标: 2019-04-30 09:50:35,790 INFO fs.TestDFSIO: Date & time: Tue Apr
我正在测试连接到 Xcode 5.1.1 的运行 iOS 7.1 的 iPhone 4。我不明白为什么当仪器显示我的应用程序仅使用几兆字节并且有大量可用内存时我会收到内存警告甚至崩溃(见附件)。有什么
我有一个假设的值数据库,每个值的大小为 4 个字节(即 4,000,000,000)。所有值都存在于数据库中,因此它以 0 开头,以最大的 4 字节数字结尾。 只有一次,我想通过将 1 到 10000
我有一个字符串元组的 python 列表,格式如下:lst = [('xxx', 'yyy'), ...etc]。该列表包含大约 8154741 个元组。我使用了一个分析器,它说该列表占用大约 500
我需要每秒发送 1,00,000 批记录。我在实验后得到的是 azure event hub 的事件限制为 10,00,000 个字节。我的每条记录有 145 字节,我必须发送的总记录是 1,00,0
HDFS块大小默认为128 MB(来源:https://hadoop.apache.org/docs/r2.9.0/hadoop-project-dist/hadoop-hdfs/hdfs-defau
我需要每秒发送 1,00,000 批记录。我在实验后得到的是 azure event hub 的事件限制为 10,00,000 个字节。我的每条记录有 145 字节,我必须发送的总记录是 1,00,0
我正在 Linux 机器上运行 Jboss EAP 服务器 6.1。分配的堆内存如下。 JAVA_OPTS="-Xms2048m -Xmx2048m -XX:MaxPermSize=256m -Dja
我最近提出并解决了一个关于将大于 2 MB 的 .PDF 文件作为 BLOBS 上传到 MySQL 数据库的问题。我不得不更改我的 php.ini 文件中的一些设置和 MySQL 的最大数据包设置。然
我需要创建一个文本文件(字母数字),其大小(精确或接近)以 MB 为单位等于我输入的数字,例如 1 MB。我试图生成一个字符串,认为一个字符是 16 位或 2 字节,所以:1KB = 1024 字节
我已经阅读了很多有关通过设置 yarn.scheduler.maximum-allocation-mb 来解决此类问题的内容,我已将其设置为 2gb,因为我当前正在运行 select count(*)
这个问题在这里已经有了答案: this exceeds GitHub's file size limit [duplicate] (3 个回答) 1年前关闭。 核心程序崩溃数据。 我不知道核心文件是从
我已经建立了一个 Electron 应用程序,并使用 Electron 打包程序对其进行了打包。我制作了238MB的Windows bundle 包,而Linux版本是450 MB。我将其与也是 El
这个问题在这里已经有了答案: Generate an integer that is not among four billion given ones (38 个答案) 关闭 9 年前。 Give
我的 Meteor 应用程序获取一个 CSV 文件,使用 Baby Parse(Papa Parse for server)对其进行解析,并将数据插入到 MongoDB 集合中。 每个 CSV 行都作
Amazon SES 有 10 MB 的文件限制 我的问题是 有没有其他方法可以发送超过 10 MB 的文件? 最佳答案 这是一个硬限制。 您需要做的是包含您当前包含在电子邮件中的 Assets 的
我是一名优秀的程序员,十分优秀!