寻求简单内存数据库*服务器*的建议(不需要持久性)[关闭]
-
27-09-2019 - |
题
应支持多个连接,最好通过 ODBC。客户端将作为单独的进程在同一台计算机上运行。不需要持久性,因为客户端将在其他地方处理持久性。如果重要的话,客户端是用 C++ 编写的。
数据很简单,就是一组不相关的双向图。访问可以直接通过值或范围(between X and Y
),没有更新。这里我们实际上不需要SQL,所以也可以考虑非SQL解决方案。
客户端应用程序是多进程的,可以在多台机器上运行。每台机器都应该有此类数据库的本地副本,该副本由其本地客户端根据中央存储进行更新。
多次编辑:
- 平台是Linux
- 出于安全原因,RAM 磁盘不是一个选项 - 我们不希望有权访问计算机的任何人都能够查看数据
- 数据只能以加密形式保存,因此解决方案要么根本不保存数据,要么允许用户定义的过滤器/插件进行保存。
解决方案
只是因为我对它比较熟悉,所以我会选择mysql。要将其用作内存数据库,请使用内存作为表类型。Redis 是一个内存中的 NoSql 数据库,可能非常适合这种情况(它在内存中运行,仅通过磁盘写入来实现持久性,可以禁用)。
其他提示
有什么特殊原因不使用打开 RAM 数据库的 SQLite 吗?
出于安全原因,RAM 磁盘不是一个选项 - 我们不希望有权访问计算机的任何人都能够查看数据
你运气不好。任何有权访问该机器的人都可以查看 /proc/$PID/mem 中的数据。
如果您正在谈论非 root 访问,请使用 /tmp/$directory/ 方法和 chmod 700。
这里有一个你可以在 Linux 下使用的技巧,它被称为“Lazy unmount”。
- 在某处挂载 tmpfs
- 启动一些进程来使用它,通过 chdir() 进入该目录。您可以使用 mysql 实例;mysql 总是对其数据目录执行 chdir。
- 进程成功启动后,使用 -l(惰性)选项卸载 tmpfs。
现在,tmpfs 仍然存在,并且只要进程正在访问它,它就会继续存在,但它不能再被不相关的进程访问,因为它不再存在于其挂载点中。
请注意,这并不会阻止 root 获取 tmpfs 中的数据,只是让其变得更加困难。
另请注意,它可能会被交换,因此如果您绝对需要它是非持久性的,则应该禁用交换(或使用加密交换)。
尝试 Boost.MultiIndex. 。这不是一个显而易见的选择,但它基于关系数据库概念。
从相同的元素集合中进行多数索引的概念是从关系数据库术语中借用的,并允许以乘以索引的关系表的精神规范复杂的数据结构,而简单的集合和地图不够。提供了多种索引,以类似的STL容器(例如STD :: SET,STD ::列表和哈希德集)进行建模。
将 mysql 与 datadir= 您为此目的安装的 tmpfs 一起使用。当然,您需要编写一些启动脚本来在启动时安装数据库(使用 mysql_install_db 或其他东西),因为您将丢失所有数据。
内存缓存 可以是一个可行的解决方案。它是一个键值存储,可以设置为在一定时间内保存值,具有可扩展性,并且易于设置和开始使用。它也可以在各种环境中运行。 这是 wiki 网站以获取更多信息, ,特别是因为主页几乎没有帮助。