新手问题 求内存盘访问文件的扩展

u4crella · December 29, 2019 · Last by msg7086 replied at January 03, 2020 · 2150 hits

有个频繁读写本地 sqlite 数据库的需要,因为不确定内存会被消耗多少,不想一次性读取所有数据。分析过也不能用 sqlite 自带的事务。

脑洞大开,能不能把 sqlite 的数据库文件以二进制方式读取到内存,然后在 Sqlite3 的连接选项里面选这个位于内存中的文件?

主要就是把每次工作新获得的数据与 sqlite 文件里已有的数据作比较,如果存在同名为 N 的属性 A,就更新 数据表里面属性 A 为这个名称 N 的属性 B 的值,否则就把新数据追加到数据表里。

已有的数据也就十几万条,但是实际上能占 800M 内存,考虑到以后可能还会增多。

这么大的数据量干嘛用 sqlite

Reply to ken

哦哦,其实稍微学了学 pgsql,要换过去也不是问题,纯个人单机的数据。那我就换 pg 了。

不想一次读取所有数据,又想全部读到内存?

Reply to dudu_zzzz

在数据库连接里面 select * ,会把所有数据库的数据读入 ruby,其中每个数据都是单独存放的。

如果只是读入 sqlite3 的二进制数据库文件,则这个“文件”是连续的。

反正我觉得 ruby 还是挺占内存的……

操作系统本来就会自动缓存文件。你在读取的时候,文件的内容会自动存在内存里,不需要扩展也不需要任何额外的措施。

你可以直接用 Ruby 代码顺序读取一次整个文件然后关掉。操作系统一般会在后台把文件留在内存里。

You need to Sign in before reply, if you don't have an account, please Sign up first.