3

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

数据很简单,就是一组不相关的双向地图。直接通过值或范围 ( between X and Y) 访问,没有更新。我们这里其实不需要SQL,所以也可以考虑非SQL的方案。

客户端应用程序是多进程的,可以在多台机器上运行。每台机器都应该有一个这样的数据库的本地副本,由其本地客户端针对中央存储进行更新。

多个编辑

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

7 回答 7

1

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

于 2010-11-22T15:52:22.050 回答
1

在打开 RAM 数据库的情况下不使用 SQLite 有什么特别的原因吗?

于 2010-11-22T16:54:57.220 回答
1

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

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

如果您说的是非 root 访问权限,则可以使用带有 chmod 700 的 /tmp/$directory/ 方法。

于 2010-11-23T18:09:19.627 回答
1

这是一个可以在 Linux 下使用的技巧,称为“延迟卸载”。

  1. 在某处安装 tmpfs
  2. 启动一些进程以使用它,其中 chdir() 进入该目录。您可以使用 mysql 实例;mysql 总是对其数据目录执行 chdir。
  3. 进程成功启动后,使用 -l(惰性)选项卸载 tmpfs。

现在 tmpfs 仍然存在,只要进程正在访问它,它就会继续存在,但是由于它不再存在于其挂载点中,因此不再相关的进程无法访问它。

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

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

于 2010-11-25T15:12:38.390 回答
0

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

对同一元素集合进行多索引的概念是从关系数据库术语中借用的,它允许本着多索引关系表的精神来规范复杂的数据结构,其中简单的集合和映射是不够的。提供了广泛的索引选择,模仿类似的 STL 容器,如 std::set、std::list 和散列集。

于 2010-11-22T15:27:22.937 回答
0

将 mysql 与 datadir= 一起使用,您已为此目的安装了 tmpfs。当然,您需要编写一些启动脚本来在启动时安装数据库(使用 mysql_install_db 或其他东西),因为您将丢失所有数据。

于 2010-11-22T16:38:54.060 回答
0

memcached可能是一个可行的解决方案。它是一种键值存储,可以设置为在一定时间内保存值,具有可扩展性,并且易于设置和开始使用。它也可以在各种环境中运行。这是 wiki 站点以获取更多信息,尤其是因为主页几乎没有帮助。

于 2010-11-22T16:45:32.677 回答