【发布时间】:2023-04-04 11:31:02
【问题描述】:
假设我在内存中有一组 C++ 对象,并想使用 SQL 语句查询它们。我愿意实现某种类型的接口来公开对象的属性,例如数据库行的列。是否有可用的库来完成此操作? 本质上,我正在尝试在不使用 .NET 平台的情况下完成类似 LINQ 的工作。
【问题讨论】:
假设我在内存中有一组 C++ 对象,并想使用 SQL 语句查询它们。我愿意实现某种类型的接口来公开对象的属性,例如数据库行的列。是否有可用的库来完成此操作? 本质上,我正在尝试在不使用 .NET 平台的情况下完成类似 LINQ 的工作。
【问题讨论】:
C++ 对象与 SQL 表不同。
如果您想使用 SQL 语法来查询对象,您首先需要将它们映射/持久化到表结构中(ORM,对象关系映射)。除了 Linq 之外,还有许多优秀的 ORM 解决方案。
在 SQL 表中表示您的对象后,您应该寻找 SQL 引擎来完成繁重的工作。大多数 SQL 平台都可以配置为将表大部分或始终保留在内存中。
作为替代方案,您可以考虑专门设计用于缓存对象的系统。在 Linux 上,memcached 是首选。
【讨论】:
在对象世界和实体关系数据 (ER) 之间存在一个陷阱。它称为Object-relational impedance mismatch。基本上,这意味着您需要将对象概念“映射”到关系数据库概念,这称为对象关系映射 (ORM)。
多态性示例:派生类不是 ER 概念,因此您需要举例说明,属于同一类的所有对象的所有属性都将存储在具有所有“父级”属性的同一个表中 或者,派生类(对象)将与派生它的抽象类存储在同一个表中。
最好使用社区支持的 ORM,但如果动机正确,您的公司可以从拥有自己的 ORM 解决方案中受益。
在我们公司,我们开发了自己的 ORM 解决方案(6 年前开始,所以它是用 C++ 编写的,建模器是一个 Windows 桌面应用程序)。但现在我们可能会使用ADO.NET Entity Framework(LINQ 的“大哥”)或其他支持的 ORM
【讨论】:
我也一直在寻找类似的东西,但似乎SQLlite 是我能找到的最接近的。
【讨论】: