【问题标题】:What's the best way to store custom objects in relational database?在关系数据库中存储自定义对象的最佳方式是什么?
【发布时间】:2010-05-16 22:25:36
【问题描述】:

我有我的对象及其属性。对象可以改变它们的结构:可以添加/删除/更改属性。物体可能会被完全丢弃。 所以对象的元数据(描述,类,像你想要的那样调用它们:))可以改变。

数据库应存储对象架构和这些对象的实例。

组织关系数据库结构以存储上述数据的最佳方式是什么?

目前我只看到两种方式:

  1. 将对象架构存储在几个表中:架构常规数据、架构属性、可能的属性类型。将实例存储在它们的表中:实例通用数据,一些表 - 每个类型从可能的属性类型表中存储实例属性数据。等等。
  2. 像在 p1 中一样存储对象架构,但在一个表中存储像 XML 文件这样的实例:一个表用于一般实例信息,一个表用于实例 XML。

请不要问我为什么/为什么需要这个。只需要存储自定义对象和数据库应该可以快速工作:)

【问题讨论】:

  • 这些对象是用什么语言编写的?
  • 你用的是什么数据库?你必须使用那个数据库吗?我问是因为你确实使用了错误的工具来完成这项工作,你可以让它工作,但它不是最理想的。这就是 NO-SQL 解决方案派上用场的地方。

标签: entities custom-object


【解决方案1】:

序列化。在 Java 中,字面意思是序列化。在 Python 中,泡菜。在其他语言中,使用他们得到的任何东西。将结果存储在一个blobby 列中。出去喝杯啤酒。

【讨论】:

  • 这是一个老问题,但这是我的直觉,我很高兴你证实了这一点。序列化似乎是最合乎逻辑的。字符串化。
【解决方案2】:

我会将架构存储为一个 XML 块,而将数据存储为另一个 XML 块。您可以轻松地对其进行序列化/反序列化,并且已经有 XML 模式的标准。

如果您需要为部分数据建立索引以便快速检索,那么我会将这些信息提取到您可以索引的其他列中。但一定要保留 XML blob。

【讨论】:

    【解决方案3】:

    我将使用 .NET(尤其是 C#)。而且我必须为项目使用关系数据库。

    如果我有数百万个实例,如果我选择使用 BLOB(上面列表中的 p2),这将如何降低数据库速度?从性能的角度来看,存储 BLOB 会更好吗?

    【讨论】:

      【解决方案4】:

      对于关系数据库,有多种选择。

      1. 序列化为 BLOB - 不好, 因为您无法搜索对象。
      2. 有一个表用于元数据和表 使用像 Property1 .. 这样的列 PropertyN - 相当快但不完全 灵活。
      3. 如果你不需要 经常更改架构,您可以使用 对象的真实表(例如真的 做CREATE TABLEALTER TABLE 等)。

      除了关系型数据库,您还可以尝试 NoSQL 数据库,例如mongodb。我刚刚进行了一些测试,一个包含 5M 对象的集合运行得相当快。显然 NoSQL 解决方案不适合您的关系要求,但如果您有时间,请尝试一下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        • 2014-06-29
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        相关资源
        最近更新 更多