使用-jsonArray时mongoimport的速度非常慢

2024-02-05

我有一个 15GB 文件,包含超过 2500 万行,采用以下 json 格式(mongodb 接受该格式导入:

[
    {"_id": 1, "value": "\u041c\..."}
    {"_id": 2, "value": "\u041d\..."}
    ...
]

当我尝试使用以下命令将其导入 mongodb 时,我得到的速度仅为每秒 50 行,这对我来说真的很慢。

mongoimport --db wordbase --collection sentences --type json --file C:\Users\Aleksandar\PycharmProjects\NLPSeminarska\my_file.json -jsonArray

当我尝试使用 python 和 pymongo 将数据插入集合中时,速度甚至更差。我还尝试提高进程的优先级,但没有任何区别。

我尝试的下一件事是同样的事情,但没有使用-jsonArray虽然我的速度有了很大的提高(~4000/秒),但它表示提供的 JSON 的 BSON 表示太大了。

我还尝试将文件拆分为 5 个单独的文件,并将它们从单独的控制台导入到同一个集合中,但所有文件的速度均降低至约 20 个文档/秒。

当我在网上搜索时,我发现人们的速度超过 8K 文档/秒,我看不出我做错了什么。

有没有办法加快这件事,或者我应该将整个 json 文件转换为 bson 并以这种方式导入它,如果是这样,哪一种是进行转换和导入的正确方法?

非常感谢。


我对 160Gb 转储文件也有完全相同的问题。我花了两天时间才加载了原始文件的 3%-jsonArray15 分钟完成这些更改。

首先,去掉初始的[和尾随]人物:

sed 's/^\[//; s/\]$/' -i filename.json

然后导入不带-jsonArray option:

mongoimport --db "dbname" --collection "collectionname" --file filename.json

如果文件很大的话sed会花费很长时间,也许您会遇到存储问题。你可以改用这个 C 程序(不是我写的,所有荣耀归于@guillermobox):

int main(int argc, char *argv[])
{
    FILE * f;
    const size_t buffersize = 2048;
    size_t length, filesize, position;
    char buffer[buffersize + 1];

    if (argc < 2) {
        fprintf(stderr, "Please provide file to mongofix!\n");
        exit(EXIT_FAILURE);
    };

    f = fopen(argv[1], "r+");

    /* get the full filesize */
    fseek(f, 0, SEEK_END);
    filesize = ftell(f);

    /* Ignore the first character */
    fseek(f, 1, SEEK_SET);

    while (1) {
        /* read chunks of buffersize size */
        length = fread(buffer, 1, buffersize, f);
        position = ftell(f);

        /* write the same chunk, one character before */
        fseek(f, position - length - 1, SEEK_SET);
        fwrite(buffer, 1, length, f);

        /* return to the reading position */
        fseek(f, position, SEEK_SET);

        /* we have finished when not all the buffer is read */
        if (length != buffersize)
            break;
    }

    /* truncate the file, with two less characters */
    ftruncate(fileno(f), filesize - 2);

    fclose(f);

    return 0;
};

P.S.:我无权建议迁移这个问题,但我认为这可能会有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用-jsonArray时mongoimport的速度非常慢 的相关文章

随机推荐

  • 仍然对 Objective-C 的动态绑定感到困惑

    这个问题来自我刚刚添加到答案中的评论这个问题 https stackoverflow com questions 6608551 question about dynamic binding objective c and methods
  • 看起来我正在实例化这个 SpeechAPI 接口。这怎么可能?

    我在我的项目中使用 Microsoft 文本到文本语音功能 但我对此有一个问题 实际上不是直接的问题 所以 通常程序员在创建接口时 他们会将 I 作为接口名称的前缀 如 IReadable IEnumerator 等 但我遇到过一些让我震惊
  • Unity 2D:区域颜色反转效果

    我正在尝试创建一个 GameObejct 如果处于活动状态 则会反转其后面任何内容的颜色 理想情况下 当该游戏对象出现 变为活动状态时 它会从其中心点扩展到一定大小的半径 因此 想象一个圆 其比例在 1 或 2 秒内逐渐从 x 0 和 y
  • 如何排除模板文字类型的子字符串?

    我想从模板文字类型 自 TypeScript 4 1 起可用 中排除一些子字符串 但我不知道是否可能 Example 我可以定义一个类型说 这个字符串是一个包含 2 个或更多元素的元组 即类似的东西 string number 使用这个文字
  • Symfony 2 - 在 ROLE_USER 下添加用户角色

    我正在尝试在 Symfony 2 中的默认 USER ROLE 下创建一个新角色 该角色对某些功能的写访问权限有限 我正在使用 FOSUserBundle 到目前为止 我已经编写了以下安全设置 但我的 ROLE DEMO 用户仍然获得 RO
  • Rails 时区问题

    这是我的控制台 irb main 048 0 gt Time now gt 2011 04 13 00 51 50 0200
  • Python ctypes 和动态链接

    我正在用 C 编写一些库 其中包含我想通过 ctypes 从 Python 调用的函数 我已经在另一个库中成功完成了此操作 但是该库只有非常普通的依赖项 即fstream math malloc stdio stdlib 我正在开发的另一个
  • 如何要求 XSD.exe 为我生成正确的类,以便我可以创建良好的 XML

    我从 Visual Studio 2010 创建了一个 XSD 文件 然后我用xsd c mydemo xsd为我生成类 以便我可以在运行时创建 XML 文件 但是 当我使用该类 填充一些值并序列化该对象时 XML 文件对我来说看起来不太好
  • 如何以最少的时间损失,根据数组中指定的字母表对一个大数组进行排序?

    如何以最少的时间浪费有效地按数组中指定的字母对具有百万个值的数组进行排序 letters array 按特定键对数组进行排序的简单函数 维护索引关联 该函数还对数组进行排序 但不是按我的字母表排序 而是按英文字母表排序 在英文字母中效果更好
  • 如何在 Mac 上安装 python3.4-dev?

    我已经尝试过 pip 和 homebrew pip search python3 4 dev并且brew search python并且在其中任何一个中都找不到 python3 4 dev 有任何想法吗 Pip 本身不会安装 Python
  • 使用 GDK 启动应用程序时嵌套多个语音触发器的方法

    使用 GDK 在 Google Glass 上启动应用程序时 是否可以嵌套语音触发器 例如 不要只是说 好吧 玻璃 gt 它的功率水平是多少 我想让应用程序提供一个选项 例如 好的 玻璃 gt 它的功率是多少 gt 超过 9000 或 低于
  • Rails 3.1 资产管道供应商/资产文件夹组织

    我正在使用jQuery 工具 http flowplayer org tools 我的 Rails 3 1 站点中的可滚动库 各种资源放置在供应商 资产文件夹中 效果很好 我的问题是关于组织供应商 资产下的各种文件的最佳方式 组织供应商 资
  • 为什么我的 PHP 电子邮件表单会吸引垃圾邮件?

    我建立了一个网站 我想在网页上有一个电子邮件联系表 以便有人可以向我发送消息 我正在使用该网站的代码 http www w3schools com php php secure mail asp http www w3schools com
  • 如何使 Google Drive Java SDK 读取/写入“我的云端硬盘”而不是其他地方?

    我正在使用最新的 Google Drive Java SDK 1 9 0 rev 155 并且我已经成功地使其能够上传文件 列出文件 创建目录 这非常困难 以及其他各种操作 但是我上传的内容在Web界面中是不可见的 同样Web界面中的内容对
  • 函数存储在变量中? JavaScript

    有人可以解释一下 JavaScript 中的这个表示法吗 函数 d 在做什么 在这个程序中 x 似乎是由以下调用的 但我不知道这意味着什么 提前致谢 x function d return d x width mx later x x 9
  • 查看网站是否已关闭的代码? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试复制类似的网站http w
  • JNA鼠标钩子的工作示例

    谁能给我提供一个 JNA 鼠标钩子的工作示例 它能够在我的 Java Swing 应用程序之外跟踪鼠标移动 单击 提前致谢 是的 这是代码 public class CWMouseHook public final User32 USER3
  • React 16.7 Hooks:`react.useState` 不是一个函数

    我正在尝试带有react 16 7的钩子的功能组件 出现错误 src 组件 页脚 index js function Footer const selectedTab setSelectedTab useState redTab const
  • Pandas:索引更新和更改按位置访问的值

    我有两个关于 Python Pandas 数据框的索引相关问题 import pandas as pd import numpy as np df pd DataFrame id range 1 9 B one one two three
  • 使用-jsonArray时mongoimport的速度非常慢

    我有一个 15GB 文件 包含超过 2500 万行 采用以下 json 格式 mongodb 接受该格式导入 id 1 value u041c id 2 value u041d 当我尝试使用以下命令将其导入 mongodb 时 我得到的速度