perl和庞大的数据库,如何搜索和存储?

时间:2010-09-10 17:03:03

标签: perl

我有一项任务,并希望在我的脑海中发展我应该如何编程。

我可能会获得一个csv格式数据库,该数据库最少有3600万行数据。将来,用户需要根据多个列值根据某些条件通过CGI / perl接口搜索此“数据库”,并显示匹配的行。

我应该如何使用perl读取csv格式(可能使用CPAN的CSV解析器)并存储到什么类型的数据库中? 关键的优先事项是搜索数据库的速度。

任何样本编码都会受到赞赏

6 个答案:

答案 0 :(得分:6)

您可能希望使用适当的数据库解决方案。最简单的设置(取决于您对RDBMS的熟悉程度)可能是MySQL。完成设置后,您需要查看Perl模块以与数据库连接。 DBIx::Class是最近的“事物”,因此有很多人使用它来回答问题。

哦,对于您的CSV解析,请查看Text::CSV,如果您不想将其直接加载到数据库中(如果您选择的RDBMS不支持直接摄取CSV文件)。

答案 1 :(得分:3)

PostgreSQL可以导入CSV文件:
http://www.postgresql.org/docs/current/static/sql-copy.html
COPY命令也比提交36M插入更有效,一次一个。

在DBMS上设计后,您应该研究导入数据的方法。有了这么多记录,我就会明白MySQL

如果数据不是关系数据且只会变大,您可能需要考虑使用Hadoop或其他形式的MapReduce。它会将这30分钟的查询变成5分钟。

答案 2 :(得分:2)

大多数数据库都可以直接将CSV文件加载到表中。例如,Oracle的SQLLoader或MySQL的load命令。

以有效的方式搜索数据库取决于数据以及您希望如何搜索它。 (即哪些字段会有趣,哪些字段可以进行排序等等)如果没有更多信息,很难给出一个可靠的答案,尽管您应该遵循索引的一般最佳实践。

关于访问数据库的代码示例,请参阅以下链接:

MySQL DBI Example

PERL DBI Doc

答案 3 :(得分:1)

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

其次,使用什么类型的数据库以及如何构建它取决于将要进行的搜索类型。

如果您正在进行简单的关键字匹配,那么键值存储将非常快。像Berkeley DB这样的东西会做得很好。

如果您有更复杂的需求,您可能需要考虑一个SQL数据库,如MySQL,PostgreSQL,Oracle,SyBase等。 SQL数据库调优和设计本身就是一个完整的研究领域。我会提供一些建议,并建议您需要仔细考虑可以应用于字段的索引,以便最大限度地提高查询速度。

答案 4 :(得分:0)

有时Perl会因为它在处理基本场景方面的效率而让您感到惊讶。也就是说,如果你的用例都是只读的,而且信息是静态的/不变的,我会看到只是打开文件并搜索它的强力方法是如何工作的。

假设这是不可接受的,那么你只需要查看DBI,Perl与数据库交谈的方式,并运行数百万次插入,然后使用像MySQL或SQL Server这样的现代RDBMS快速读取

答案 5 :(得分:0)

甲骨文收购了MySQL是一个值得关注的问题但我认为MariaDB与最新的mysql一样好或更好....我还没有看过基准测试......只是发现它在这篇文章中缺席所以提及。

anonymus