2010-12-10 18 views
1

我想在python中执行一些n-gram计数,我想我可以使用MySQL(MySQLdb模块)来组织我的文本数据。在MySQL中接近序列文本文件读取性能

我有一个相当大的表格,大约10mil记录,表示由唯一数字ID(自动增量)和语言字段(例如“en”,“de”,“es”等等索引的文档..)

select * from table是太慢和内存破坏性。 我结束了一个与像查询拆分整个ID范围为更小的范围内(比如2000和记录各宽),并处理每那些规模较小的记录集之一:

select * from table where id >= 1 and id <= 1999 
select * from table where id >= 2000 and id <= 2999 

等等...

有什么办法可以更有效地利用MySQL来实现它,并且实现与连续阅读大型语料库文本文件类似的性能?

我不关心记录的排序,我只是希望能够处理所有与我的大表中的某种语言相关的文档。

回答

1

可以使用HANDLER语句以块为单位遍历表(或索引)。如果在查看行时出现并消失(提示:你不会获得一致性),但是使某些应用程序的代码变得更简单,这不是非常便携的,并且对事务以“有趣”的方式工作。

通常情况下,您将获得性能提升,就好像您的数据库服务器位于本地机器一样,数据的多个副本(内存)以及其他一些处理都是必需的。这是不可避免的,如果真的困扰你,你不应该使用mysql来达到这个目的。

+0

谢谢,我会试试! – Alexandros 2010-12-10 15:06:15

0

除了在您用来过滤查询的任何列上定义索引(语言和ID可能,其中ID已经有索引关键主键)之外,没有。

0

首先:如果您可以指定所需的列(本例中为lang和doc),则应避免使用*。第二:除非您经常更改您的数据,否则我没有看到将所有 这存储在数据库中,尤其是如果您要存储文件名。例如,您可以使用xml格式(并且使用SAX api读/写)

如果您想要一个数据库并且比MySQL更快,那么可以考虑使用SQLite或BerkeleyDb等内存数据库, python绑定。

Greetz, J.