【发布时间】:2015-03-27 22:22:21
【问题描述】:
我无法在远程机器上安装 SQLite,所以我必须想办法在某种数据库结构中存储大量数据。
示例数据
key,values...
key,values....
..
目前在一个 20MB 的平面文件中有大约一百万行,我必须每小时读取文件中的每条记录和值并更新或添加一条记录。由于它是一个平面文件,我每次都必须重写整个文件。
我正在查看Storable 模块,但我认为它也按顺序写入数据。我只想编辑那些需要更改的记录。
随机记录的读取和更新是一项要求。添加可以在任何地方(顺序不重要)
任何人都可以提出一些建议吗?我如何知道是否可以在这些混合了 Solaris 和 Linux 的系统上设置本机 Berkeley 数据库文件?
________________终于______
最后我更好地理解了事情(谢谢大家),并且根据您的建议,我使用了 AnyDBM_File。它发现所有操作系统上都安装了 NDBM_File('C' 库)。到目前为止一切顺利。
只是为了检查它在现实世界中的表现。我运行了一个示例脚本来添加1 million records(我认为我可能在一天内获得的最大记录,通常在 500k 到 700k 之间)。天哪,它在我的磁盘上创建了一个 110G 数据文件!!!!所有的记录都是这样的:
a628234 = 0.178532683639599
我的意思是我的真实世界纪录比这更长。将其与保存 700k+ 条记录且磁盘上只有 15Mb 的平面文件进行比较。
我对它的缓慢和臃肿感到失望,所以现在我想我会付出代价,每次需要编辑时都写整个文件。
再次感谢您的帮助。
【问题讨论】:
-
您的平面文件是否有固定的记录长度,或者是逗号分隔的还是类似的?
-
记录长度不是固定的,并且该值会根据程序逻辑而变化。此外,如果我使用这些各种 perl 模块 AnyDBM_File 或 DB_File。我的操作系统上还需要数据库服务器吗?
-
perldoc perlport对 DBM 有这样的看法:“没有一个 DBM 模块可在所有平台上使用。SDBM_File 和其他模块通常在所有 Unix 和 DOSish 端口上都可用,但在 MacPerl 中不可用,其中只有 NBDM_File 和 DB_File 可用。好消息是至少应该有一些 DBM 模块可用,并且 AnyDBM_File 将使用它可以找到的任何模块。当然,代码需要相当严格,下降到最大公因数 (例如,每条记录不超过 1K),以便它适用于任何 DBM 模块。有关详细信息,请参阅 AnyDBM_File。" -
不,您不需要数据库服务器来使用 DBM。
-
ThisSuitIsBlackNot,谢谢。但是文档是否在谈论安装在操作系统中的 perl 模块 或 db libraris。在我的情况下,我环顾四周,发现:一台服务器上的 db.h 和另一台服务器上的 dbm.h。所以我理解所有这些 perl 模块只是实际数据库库的“连接器”,它们将单独安装在操作系统中?对吗?