独立和集成数据库、IPC、FFI

问题描述

许多应用程序使用独立的本地数据库作为数据存储。在大多数情况下,它涉及各种类型的 IPC,通常是通过套接字。

IPC 对 exp 造成了比较大的性能影响。同步、序列化、某种具有潜在附加数据和解析的通信协议。

此外,(在 Java 等语言的典型 API 中)sql 数据库涉及为每个查询格式化、传递和解析字符串。

总而言之,使用独立的本地数据库作为存储似乎会产生大量不必要的累积开销,尤其是对于涉及几乎每个客户端交互的查询的应用程序。

另一方面,如果数据库在应用程序线程中运行并且允许基于对象的查询而无需像字符串这样的中间格式,那么除了同步之外,几乎所有这些开销都可以避免。

我想知道为什么第二种方法没有得到更广泛的使用。 是因为吗?

  1. 数据库是用 C 编写的并且应用程序从 Java 或 Python 等“较慢”的语言连接到它时,IPC 和字符串查询开销并不那么重要,即使是函数调用也可能有类似的开销?立>
  2. IPC 和字符串查询开销大多发生在单独的数据库进程上,通常运行在单独的核心上,字符串查询格式化开销类似于对象查询创建,因此只有同步开销留在应用程序进程上,这将是无论如何,线程是不可避免的。
  3. 具有通信协议和字符串查询的独立数据库更加灵活和通用,因为多个应用程序可以同时访问它们,字符串查询是通用的(不要对编写连接应用程序的语言强加任何特定属性,如范式),易于描述、理解、重用和保存为片段,并且通过套接字进行通信允许在一个实现中提供远程和本地连接。
  4. 为特定语言创建独立数据库和编写连接库比为每种语言编写集成数据库更容易。
  5. 独立数据库性能要高得多,因为它们更容易开发(外观 4)并因此得到优化,或者它们是用“更快”的语言编写的,并且性能优势超过了 IPC 开销。
  6. 用一种低级语言编写的数据库更好(看 5),并且不使用 FFI 在应用程序线程中运行数据库而不是使用 IPC 的独立数据库,因为无论如何 FFI 涉及的开销与 IPC 类似。
  7. 立>
  8. 频繁查询数据库的应用程序相对较少。
  9. 具有频繁数据库查询的应用程序使用缓存并尽可能批量执行数据库查询
  10. 将应用程序和存储分开很方便。
  11. 我完全错误且集成,在单独的线程中运行,在频繁查询的应用程序中使用和首选数据库,而使用独立数据库,尤其是 sql 数据库一个常见错误和反模式。

如果上面列出的所有因素都得到确认或反驳,并对其重要性进行简短的解释和意见,我将不胜感激。欢迎提出其他建议

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)