首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >利用sqlite3构建大型信息检索/智能系统

利用sqlite3构建大型信息检索/智能系统
EN

Stack Overflow用户
提问于 2011-11-25 15:15:52
回答 3查看 343关注 0票数 1

这个问题与不同数据库引擎对IR和AI研究的适用性有关。这两个重要问题用黑体字写在下面。

我正在使用python将一个17千兆明文语料库加载到sqlite3中。行项填充三个表,单个规范化步骤为1..*,平均每行5个条目。我的桌子上没有索引。我并不是把insert语句分批在一起,这可能是我应该有的,但我只是在百万行之后调用sqlite的提交消息(所以每行插入3-8个表)。事后看来,我可能应该将它们组合成1000个值/插入。提交可能并不像我想的那样,它可能每隔几个条目就进行一次内部提交。

数据加载是从CPU绑定开始的,但现在DB大小为33G,它似乎是IO绑定。纯文本语料库和db文件都在同一个磁盘上。我假设sqlite3是非常保守的预先填充,它的网页,并正在分割页左,右和中心。

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

的经验来看,sqlite3是IR/AI系统创建的障碍,还是祝福?,我的意思是,我甚至还没有创建索引,而且数据已经加载了14个小时。如果我要稳步地遇到如此庞大的加载时间,我可能会坚持使用Sql Server进行未来的原型开发。我知道伯克利db也有一个sqlite3接口,它应该具有事务性mvcc数据库的性能特征,任何人都有这样的经验吗?

编辑

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

C++可能只是用于数据加载的一种更好的语言(特别是在涉及3.4亿行数据时),我预计会有大量无用的循环浪费在内存副本和分配上。如果我错了,请纠正我,因为用python编写丢弃代码更快。

EN

回答 3

Stack Overflow用户

发布于 2011-11-25 15:37:54

这只是一个建议,但我认为使用这么多数据(除非您有一个非常简单的访问模式),任何“真正的”DB都会大大超过sqlite3 (尽管测试一下.),(里程将随引擎类型和可用系统资源的不同而变化-- ram,cpu)。此外,如果您不使用事务,Sqlite将在每次插入时执行一个事务。每个事务需要2个光盘旋转,所以驱动器速度是这里的限制。尝试做一个史诗般的事务,看看需要多长时间。如果系统没有什么风险(或数据丢失的危险),那么您就没有什么好担心的了,也不需要每1K行提交一次。

我意识到这并没有完全回答你的问题,但我希望它证明是有帮助的。

票数 4
EN

Stack Overflow用户

发布于 2011-12-02 00:16:58

你的数据是什么结构的?也许值得看一看一些不那么传统的数据存储options.This是一篇稍旧的文章,但它很好地展示了其他一些选项:http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

作为NoSQL信息的后续,您考虑过与思考并行吗?如果可以有多个可以接受写入的数据存储节点,那么可以考虑设置多个作业以同时插入数据?

即使您想坚持使用RDBS,我也建议您使用Postgres (甚至MySQL),因为它们并不比sqlite复杂得多,并且带来了更多的特性(包括性能(取决于使用)),您仍然能够决定实际数据文件的位置。如果可能的话,尝试让您正在读取的数据和您正在写入的数据文件也在物理上分开的磁盘上(即完全不同的纺锤,而不仅仅是不同的逻辑卷),这样磁盘头就不会乱七八糟,浪费时间。即使将数据放在单独的机器上并通过iSCSI (1GBbit)附加数据,也很可能更快。

您使用的插入数据的语言不应该太重要(特别是与您最终用于查询数据的任何操作相比),因为它所做的一切都是从磁盘读取并通过套接字发送。(也就是说,如果代码很糟糕,就会产生影响!)

票数 1
EN

Stack Overflow用户

发布于 2012-01-03 21:15:21

我在BDB上拥有惊人的负载速度,尤其是嵌入式模式下的C++ (即没有客户机服务器通信)。在旧机器上(8年前):每秒5万条记录。试试看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8271051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档