我在Ruby中提出了如何将哈希数据结构保存到磁盘的建议(可能在Linux OS上使用简单/纯Ruby解决方案)。
我正在编写聊天机器人对话框服务器和
服务器必须访问小型数据结构(哈希)的会话,其中session
类似于:
def to_hash
{ dialog: @dialog, data: @data, updated_at: timestamp_now }
end
服务器在内存中维护一个键值哈希会话存储:
:giorgio => {:dialog=>"Cart#cart_action", :data=>{:cart=>["1 pizza Capresina", "2 pizze 4 Stagioni", "2 lattine di coca-cola"]}, :updated_at=>"2016-10-11T10:57:58Z"}
:paola => {:dialog=>"Cart#cart_action", :data=>{:cart=>["5 pizze Capricciosa con aggiunta di acciughe", "2 birre medie chiare alla spina"]}, :updated_at=>"2016-10-07T17:17:21Z"}
这个数据结构可能只是session
的Ruby哈希值,或者可以作为线程安全的LRU缓存(如lru_redux)进行更好的管理。
一些解决方案: - 允许任何NoSQL数据库的哈希数据持久性,例如MongoDB的 - 使用Postgresql特定功能将非结构化数据快速添加为HSTORE或JSONB - 使用REDIS数据库。 - 将密钥/值磁盘库用作levelDB或来自Facebook的新rocksdb:
提案/意见: 我的想法可能只是使用文件系统存储来序列化/反序列化内存数据,例如,将每个会话数据存储在一个专用文件中,该文件包含使用标准Ruby编组/解组(或其他快速便携式快速序列化为msgpack)存储的特定数据。以这种方式,每个数据对应于单个文件,并且读/写访问几乎是恒定的并且与记录的数量无关。
此解决方案的缺点是数据库由大量数据文件组成。
有什么想法吗?