2016-02-29 46 views
2

我正在使用PStore来存储某些计算机模拟的结果。不幸的是,当文件变得太大时(我看到的超过2GB),我无法将文件写入磁盘,并收到以下错误;Ruby PStore文件太大

Errno::EINVAL: Invalid argument - <filename> 

我知道,这大概是IO的限制,但我不知道是否有解决方法。例如,要读取较大的JSON文件,我首先需要split该文件,然后分别读取它。可能最终的解决方案应该是切换到后端的适当数据库,但由于我使用的特定Ruby(Sketchup)的一些限制并非总是可行。

回答

1

我打算假设您的数据有一个可以用作原始键的字段。

因此,我会建议,而不是将数据转储到一个巨大的文件,你可以把你的数据到不同的文件/桶。 例如,如果您的数据有name字段,则可以取第一个1-4个字符的名称,使用rojj-datafile.pstore这些字符创建一个文件并在其中添加条目。任何名称以'rojj'开头的记录都将进入该文件。

一个更结构化的版本是把第一个字符作为一个目录,然后把文件放在那里,就像r/rojj-datafile.pstore

很明显,您的读写机制必须考虑到这个新的文件结构,并且毫无疑问最终将处理数据放入pstore的速度会更慢。

+0

你假设正确。不幸的是,每个密钥的内容可能会生成一个已经有几GB的文件。数据实际上是表示特定模拟结果的时间序列。我可以按时间步长分开,但是在那一点上,我可以简单地为每个文件保存一个“元帅”文件。 – Rojj