2010-12-10 47 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.