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

perl和大型数据库,如何搜索和存储?,perl,Perl,我有一个任务,我想在我的脑海中发展我应该如何去编程这个 我可能会得到一个csv格式的数据库,其中至少有3600万行数据。将来,用户需要根据某些条件(取决于多个列值)通过CGI/perl界面搜索这个“数据库”,并显示匹配的行 我应该如何使用perl读取csv格式(可能使用CPAN的csv解析器)并将其存储到什么类型的数据库中? 关键的优先事项是数据库搜索的速度 任何示例编码都会受到欢迎大多数数据库都有一种直接将CSV文件加载到表中的方法。例如,对于Oracle或用于MySQL的命令 以高效的方式搜

我有一个任务,我想在我的脑海中发展我应该如何去编程这个

我可能会得到一个csv格式的数据库,其中至少有3600万行数据。将来,用户需要根据某些条件(取决于多个列值)通过CGI/perl界面搜索这个“数据库”,并显示匹配的行

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


任何示例编码都会受到欢迎

大多数数据库都有一种直接将CSV文件加载到表中的方法。例如,对于Oracle或用于MySQL的命令

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

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


大多数数据库都有将CSV文件直接加载到表中的方法。例如,对于Oracle或用于MySQL的命令

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

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


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


假设这是不可接受的,那么您只需看看DBI,即Perl与数据库对话的方式,并运行数百万次插入,然后使用MySQL或SQL Server等现代RDBMS,您的读取速度就会很快。

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


假设这是不可接受的,那么您只需看看DBI,即Perl与数据库对话的方式,并运行数百万次插入,然后使用MySQL或SQL Server等现代RDBMS,您的读取速度就会很快。

您可能希望使用适当的数据库解决方案。最简单的设置(取决于您对RDBMSE的熟悉程度)可能是。一旦设置好了,您就需要查看用于与数据库接口的Perl模块。现在是“in thing”,因此,有很多人使用它来回答问题


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

您可能希望使用适当的数据库解决方案。最简单的设置(取决于您对RDBMSE的熟悉程度)可能是。一旦设置好了,您就需要查看用于与数据库接口的Perl模块。现在是“in thing”,因此,有很多人使用它来回答问题

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

首先,使用t解析CSV文件

第二,使用什么样的数据库以及它应该如何构造取决于将要进行什么样的搜索

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

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

首先,使用T解析CSV文件

第二,使用什么样的数据库以及它应该如何构造取决于将要进行什么样的搜索

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


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

PostgreSQL
能够导入CSV文件:

COPY命令也比一次提交36M个插入更有效

在DBMS上进行设计后,应该研究导入数据的方法。不过,有了这么多的记录,我就可以避开MySQL了


如果数据不是关系型的,并且只会变得更大,那么您可能需要考虑使用
Hadoop
,或者其他形式的
MapReduce
。它将把30分钟的查询转换为5分钟。

PostgreSQL能够导入CSV文件:

COPY命令也比一次提交36M个插入更有效

在DBMS上进行设计后,应该研究导入数据的方法。有了这么多的记录,我就可以避开MySQL了