寻求简单的内存中DB *服务器*的建议(不需要持久性)

时间:2010-11-22 14:52:31

标签: c++ database linux odbc in-memory-database

应该支持多个连接,最好是通过ODBC。客户端将在同一台计算机上作为单独的进程运行。不需要持久性,因为客户端将处理其他地方的持久性。如果重要的话,客户端是用C ++编写的。

数据非常简单,它是一组不相关的双向地图。访问可以直接通过值或范围(between X and Y)进行,无需更新。我们实际上并不需要SQL,因此也可以考虑非SQL解决方案。

客户端应用程序是多进程的,可以在多台计算机上运行。每台计算机都应具有此类数据库的本地副本,该数据库由本地客户端针对中央存储库进行更新。

多次修改

  1. 平台是Linux
  2. 出于安全原因,RAM磁盘不是一个选项 - 我们不希望有权访问该计算机的任何人都能够查看数据
  3. 数据应该只能以加密形式保留,因此解决方案要么根本不保留数据,要么允许用户定义的过滤器/插件进行持久化。

7 个答案:

答案 0 :(得分:1)

仅仅因为我对它的熟悉,我会选择mysql。要将其用作内存数据库,请使用内存作为表类型。 Redis是一个内存NoSql数据库,它可能非常适合这种情况(它在内存中运行,只有持久性的光盘写入才能被禁用)。

答案 1 :(得分:1)

没有使用带有RAM数据库的SQLite的任何特殊原因?

答案 2 :(得分:1)

出于安全原因,RAM磁盘不是一个选项 - 我们不希望有权访问该机器的任何人都能够查看数据

你运气不好。任何有权访问机器的人都可以查看/ proc / $ PID / mem中的数据。

如果您正在谈论非根访问,请使用/ tmp / $目录/方法与chmod 700。

答案 3 :(得分:1)

这是您可以在Linux下使用的技巧,它被称为“懒惰卸载”。

  1. 在某处安装tmpfs
  2. 启动一些进程以使用它,chdir()进入该目录。你可以使用mysql实例; mysql总是对其数据目录执行chdir。
  3. 成功启动进程后,使用-l(lazy)选项卸载tmpfs。
  4. 现在tmpfs仍然存在并且只要进程正在访问它就会继续存在,但是不再由不相关的进程访问它,因为它的挂载点中不再存在它。

    请注意,这绝不会阻止root获取tmpfs中的数据,只是让它变得更难。

    另请注意,它可能会被交换,因此如果您绝对需要非持久性,则应禁用swap(或使用加密交换)。

答案 4 :(得分:0)

试试Boost.MultiIndex。这不是一个明显的选择,但它基于关系数据库概念。

  

多索引的概念   相同的元素集合是   借用关系数据库   术语和允许的   复杂数据的规范   结构本着繁衍的精神   索引关系表,简单   集合和地图是不够的。一个广泛的   提供指数选择,   以类似的STL容器为模型   比如std :: set,std :: list和hashed   集。

答案 5 :(得分:0)

使用mysql和datadir =为此目的安装的tmpfs。你需要做一些启动脚本,它在启动时安装数据库(使用mysql_install_db或其他东西),当然,因为你将丢失所有数据。

答案 6 :(得分:0)

memcached可以是一个可行的解决方案。它是一个键值存储,可以设置为在一定时间内保存值,可扩展且易于设置和开始使用。它也可以在各种环境中运行。 Here's the wiki site for more information,特别是因为主页几乎没有帮助。