gpt4 book ai didi

database-design - 使用 sqlite3 构建大规模 OR/AI(信息检索/人工智能)系统

转载 作者:行者123 更新时间:2023-12-03 18:27:18 27 4
gpt4 key购买 nike

这个问题与不同数据库引擎对 IR 和 AI 研究的适用性有关。下面的两个重要问题以粗体显示。

我正在使用 python 将 17 gig 纯文本语料库加载到 sqlite3 中。行项目填充三个表,单个标准化步骤为 1..*,平均每行 5 个条目。我的 table 上没有索引。我没有将插入语句批处理在一起,我可能应该这样做,但我只是在一百万行之后调用 sqlite 的提交消息(因此每行插入 3-8 个表)。事后看来,我可能应该将它们一起批处理成 1000 个值/插入。提交可能没有像我想象的那样做,它可能每隔几个条目就进行一次内部提交。

数据加载从 CPU 限制开始,但现在 DB 大小为 33 gig,它似乎受 IO 限制。明文语料库和 db 文件都在同一个磁盘上。我假设 sqlite3 在预先填充它的页面时非常保守,并且现在正在左右和中心拆分页面。

无论如何,我现在可能会坚持使用 sqlite3,我猜与企业级数据库相比的优势是能够临时创建多个数据库文件并将文件放在不同的磁盘上。传统上,我假设大多数人使用 postgres/Xapian/Sql Server 或 Oracle 来处理这类东西。

从经验来看 sqlite3 是 IR/AI 系统创建的障碍还是祝福? ,我的意思是我什至还没有创建索引,数据已经加载了 14 个小时。如果我要稳定地遇到如此巨大的加载时间,我可能会坚持使用 Sql Server 来进行 future 的原型(prototype)设计。 我知道 berkeley db 也有一个 sqlite3 接口(interface),它应该具有事务性 mvcc 数据库的性能特征,有没有人有经验解决这些问题?

编辑

正如 James 提醒我的那样,事务切换从等式中删除了 2 次同步磁盘写入,因此我将禁用日志,其次我将禁用同步设置,以便引擎有机会在自己空闲时插入行,这意味着我希望它的行为就像我在批处理行插入一样。

C++ 可能只是用于数据加载的全面更好的语言(尤其是当涉及到 3.4 亿行数据时),我预计大量无用的周期被浪费在内存复制和分配上。如果我错了,请纠正我,因为在 python 中编写一次性代码会更快。

最佳答案

只是一个建议,但我会认为有这么多数据(除非你有一个非常简单的访问模式),任何“真正的”数据库都会严重优于 sqlite3(尽管做测试......),(里程会因引擎类型和可用的系统资源 - 内存、CPU)。另外 - 如果你不使用事务 Sqlite 将在每次插入时执行一个事务。每个事务需要 2 次磁盘旋转,因此驱动器速度是这里的限制因素。尝试做一个史诗般的交易,看看需要多长时间。如果系统在数据导入过程中下降的风险(或数据丢失的危险)很小,那么您无需担心,您无需每 1K 行提交一次。

我意识到这并不能完全回答您的问题,但我希望它对您有所帮助。

关于database-design - 使用 sqlite3 构建大规模 OR/AI(信息检索/人工智能)系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8271051/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com