2010-09-10 56 views
1

我有一個任務,並希望在我腦海中發展我應該如何編程這個。perl和巨大的數據庫,如何搜索和存儲?

我可能會得到一個csv格式的數據庫,它至少有3600萬行數據。將來,用戶將需要通過CGI/perl接口根據某些條件(取決於多個列值)來搜索此「數據庫」,並顯示匹配的行。

我應該如何使用perl讀取csv格式(可能使用CPAN中的CSV解析器)並存儲到什麼類型的數據庫中? 關鍵優先級是數據庫搜索的速度。

任何樣品編碼將理解

回答

6

您可能想要使用適當的數據庫解決方案。最簡單的設置(取決於你對RDBMSes的熟悉程度)可能是MySQL。一旦你完成了設置,你就需要查看Perl模塊來與數據庫進行交互。 DBIx::Class這些日子是「在事物中」,因此,有很多人在使用它來回答問題。

哦,如果您不想直接將其加載到數據庫中(並且您選擇的RDBMS不支持直接攝取CSV文件),並且對於您的CSV解析,請查看Text::CSV

2

大多數數據庫將具有直接加載CSV文件到一個表的裝置。例如Oracle的SQLLoader或MySQL的load命令。

以高效方式搜索數據庫將取決於數據以及您希望如何搜索數據庫。 (即哪些字段會很有趣,哪些字段可能會分類等)。如果沒有更多信息,很難給出一個確鑿的答案,儘管您應該遵循索引的一般最佳實踐。

用於訪問數據庫的關於代碼示例,請訪問以下鏈接:

MySQL DBI Example

PERL DBI Doc

0

有時Perl的驚喜,你與它在處理基本方案的效率。也就是說,如果你的用例全部是隻讀的,並且信息是靜態的/不變的,我會看到如何開放文件和搜索它的第一個工作的蠻力方法。

假設這是不可接受的,那麼您只需要看DBI,Perl與數據庫交談的方式,並運行一次數百萬次的插入,然後您的讀取將快速使用現代RDBMS,如MySQL或SQL服務器。

1

首先,使用T ext::CSV_XS解析CSV文件。

其次,要使用什麼類型的數據庫以及它應該如何構建取決於要進行哪種搜索。

如果你正在做簡單的關鍵字匹配,那麼一個鍵值存儲將會非常快。像伯克利DB這樣的事情會很好。

如果您有更復雜的需求,您可能需要考慮SQL數據庫,如MySQL,PostgreSQL,Oracle,SyBase等。 SQL數據庫調整和設計是一個完整的研究領域。儘管我會提供一些建議,並且建議您需要非常仔細地考慮可以將哪些索引應用於字段,以便最大限度地提高查詢速度。

3

PostgreSQL已導入CSV文件的能力:
http://www.postgresql.org/docs/current/static/sql-copy.html
COPY命令也比犯36M插入,一次一個效率更高。

您應該研究一下在數據庫管理系統上設計數據後如何導入數據。儘管如此,有很多記錄我都不會清楚MySQL

如果數據不是關係性的並且只會變大,您可能需要使用Hadoop或某種其他形式的MapReduce進行調查。它會將這30分鐘的查詢變成5分鐘。

+0

你能說明爲什麼MySQL不應該用於3600萬條記錄嗎?最好給你的斷言提供理由,而不是把它們扔到那裏。 – CanSpice 2010-09-10 18:55:58

+0

成本考慮,我以前主要使用MySQL,因爲它是託管公司使用的默認設置(LAMP:Linux/Apache/PHP/MySQL)的一部分。它達到了它的目的,但我也注意到某些記錄沒有被記錄下來,它不是最有效的數據庫。 PostgreSQL是一個免費的選擇,它有更多的選擇,既可靠又高效。 – vol7ron 2010-09-10 23:02:08

+0

自從Oracle收購MySQL以來,我還有一個擔憂。甲骨文將如何對待它是值得懷疑的。他們可以採取一些專有工程並更新它,或者他們可以完全淘汰(更可能)。無論如何,PostgreSQL擁有出色的用戶和開發人員社區。儘管它是一個很好的免費數據庫,但Oracle,SQL Server和DB2都有其優勢,但是需要付出代價。 – vol7ron 2010-09-10 23:05:47

0

Oracle已經購買了MySQL,這是一個值得關注的問題,但我認爲MariaDB與最新的MySQL一樣好或者更好....我還沒有看到基準測試...只是在本文中發現它缺失所以提到。

anonymus