访问速度,perl二进制哈希文件vs mySQL

时间:2011-02-14 21:06:24

标签: mysql perl

我目前使用很多存储在多个文件位置的perl二进制哈希文件来将数据加载到这个cgi网站。如果我决定将数据存储在那里,我正在讨论mySQL是更快还是更慢。

任何见解?我知道perl哈希值已完全加载到内存中。

戈登

4 个答案:

答案 0 :(得分:8)

使用数据库意味着您的查找速度会变慢,但您的脚本将使用更少的内存。

使用内存中哈希意味着您的查找速度会更快但脚本会占用更多内存。

如果你没有内存麻烦而且你的哈希值永远不会变大,那么继续使用它们。

如果您没有内存问题而且哈希值会变大,那么请考虑使用数据库。

如果您遇到内存问题,请使用数据库。

如果您想使用数据库来使用数据库(即学习新技能),请使用数据库。

答案 1 :(得分:2)

如果Perl哈希处理您的数据需求,您可能不需要完整的SQL数据库的开销。关键值>值存储有很多存储选择,例如Berkley DB和整个“NOSQL”运动。谷歌那些,你会发现很多信息。 CPAN中存在许多Perl接口。

答案 2 :(得分:1)

严格地说,在速度方面,在直接内存中散列中找到单个,精确匹配的键,除非您的数据适合放入数组,否则就可以获得。 (即,它将仅由一系列数字键访问,这些数字键形成从0开始的大部分连续范围。)

如果您可能需要搜索多个可能的密钥(例如,名称和员工ID),或者您需要进行非严格基于相等性的搜索(例如,“查找最后一名员工”)名字'史密斯'“),那么你需要通过搜索哈希键来显着减慢速度,数据库开始看起来好多了。

整体性能的另一个因素是您提到您的哈希“存储在多个文件位置”。如果您只进行一次或几次查找,那么从这些文件中读取内存中的哈希值也需要时间,这再次倾向于使用数据库,这将最大限度地减少从磁盘读取的不需要的数据量。 / p>

因此,这很大程度上取决于您如何访问数据和访问模式。

答案 3 :(得分:0)

除了已经提到的内容之外,您将获得更多数据库的可伸缩性,因为它可以卸载到另一台服务器。 MySQL已经多年来一直致力于更快地进行复杂的查找,这是您不必编写的代码。使用二进制哈希,您可以担心在不降低应用程序速度的情况下同步到磁盘,确保磁盘写入的原子性,维护和优化,以及在多个进程同时访问数据时处理同步。使用数据库为您处理所有这些。

另一方面,数据库意味着在发送查询和通过网络或本地套接字接收结果时,I / O会有额外的延迟。不要低估你在这里花费的时间,特别是当你的数据集增长时。

通过哈希驱动程序编写通用API通常是个好主意。然后,当可伸缩性或并发性成为问题时,您只需添加MySQL驱动程序并迁移数据即可。当然,这是一个很大的“公正”,但它是一种快速而简单的前进方式,如果需要进行更改,则会限制对其他软件的影响