【问题标题】:Using SQL statements to query in-memory objects使用 SQL 语句查询内存中的对象
【发布时间】:2023-04-04 11:31:02
【问题描述】:

假设我在内存中有一组 C++ 对象,并想使用 SQL 语句查询它们。我愿意实现某种类型的接口来公开对象的属性,例如数据库行的列。是否有可用的库来完成此操作? 本质上,我正在尝试在不使用 .NET 平台的情况下完成类似 LINQ 的工作。

【问题讨论】:

    标签: c++ sql in-memory


    【解决方案1】:

    C++ 对象与 SQL 表不同。

    如果您想使用 SQL 语法来查询对象,您首先需要将它们映射/持久化到表结构中(ORM,对象关系映射)。除了 Linq 之外,还有许多优秀的 ORM 解决方案。

    在 SQL 表中表示您的对象后,您应该寻找 SQL 引擎来完成繁重的工作。大多数 SQL 平台都可以配置为将表大部分或始终保留在内存中。

    作为替代方案,您可以考虑专门设计用于缓存对象的系统。在 Linux 上,memcached 是首选。

    【讨论】:

    • 我已经成功地将 SQLite 用于一些项目。 MySQL 也有完全的内存表类型。
    【解决方案2】:

    在对象世界和实体关系数据 (ER) 之间存在一个陷阱。它称为Object-relational impedance mismatch。基本上,这意味着您需要将对象概念“映射”到关系数据库概念,这称为对象关系映射 (ORM)。

    多态性示例:派生类不是 ER 概念,因此您需要举例说明,属于同一类的所有对象的所有属性都将存储在具有所有“父级”属性的同一个表中 或者,派生类(对象)将与派生它的抽象类存储在同一个表中。

    最好使用社区支持的 ORM,但如果动机正确,您的公司可以从拥有自己的 ORM 解决方案中受益。

    在我们公司,我们开发了自己的 ORM 解决方案(6 年前开始,所以它是用 C++ 编写的,建模器是一个 Windows 桌面应用程序)。但现在我们可能会使用ADO.NET Entity Framework(LINQ 的“大哥”)或其他支持的 ORM

    【讨论】:

      【解决方案3】:

      我也一直在寻找类似的东西,但似乎SQLlite 是我能找到的最接近的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多