FileDB:Ruby中的键/值NoSQL快速磁盘存储

时间:2016-10-11 11:30:21

标签: ruby caching filesystems key-value-store nosql

我在Ruby中提出了如何将哈希数据结构保存到磁盘的建议(可能在Linux OS上使用简单/纯Ruby解决方案)。

我正在编写聊天机器人对话框服务器和

  1. 服务器必须访问小型数据结构(哈希)的会话,其中session类似于:

    def to_hash
      { dialog: @dialog, data: @data, updated_at: timestamp_now }
    end
    
  2. 服务器在内存中维护一个键值哈希会话存储:

    :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"}
    
  3. 这个数据结构可能只是session的Ruby哈希值,或者可以作为线程安全的LRU缓存(如lru_redux)进行更好的管理。

    1. 我的问题是如何将这些数据(会话)保存到磁盘。我想在内存中使用缓存管理会话(使用生存时间设置到期)并同时维护磁盘持久性,具有多个线程和多个进程来访问存储(磁盘数据)。
    2. 一些解决方案: - 允许任何NoSQL数据库的哈希数据持久性,例如MongoDB的 - 使用Postgresql特定功能将非结构化数据快速添加为HSTORE或JSONB - 使用REDIS数据库。 - 将密钥/值磁盘库用作levelDB或来自Facebook的新rocksdb

      提案/意见: 我的想法可能只是使用文件系统存储来序列化/反序列化内存数据,例如,将每个会话数据存储在一个专用文件中,该文件包含使用标准Ruby编组/解组(或其他快速便携式快速序列化为msgpack)存储的特定数据。以这种方式,每个数据对应于单个文件,并且读/写访问几乎是恒定的并且与记录的数量无关。

      此解决方案的缺点是数据库由大量数据文件组成。

      有什么想法吗?

0 个答案:

没有答案