SQLITE:包含20列和20个键值表的单个表

时间:2015-03-07 10:29:43

标签: sql sqlite key-value-store

我正在开发管理由组件组成的对象的系统。 从性能角度将它们存储在SQLITE数据库中的最佳方法是什么?如果有20种组件类型 每个组件的大小为1-10Kb。通常,每个对象由4-6个不同的组件组成。

我可以看到两个选项:

  1. 将其实施为一个包含密钥和20个blob列的表
  2. 使用带有键和单个blob列的20个表
  3. 我将对数据库进行的唯一查询是:通过id获取组件数据,写入数据并删除数据。

    PS:对象类看起来像这样:

    class Entity
    {
        Component *components[20];
    }
    

    通常组件数组有4-6个非空指针

1 个答案:

答案 0 :(得分:0)

您可能需要实体属性值结构来存储BLOB。

CREATE TABLE myObjectComponents (
   objectID          INTEGER,    -- Entity
   componentTypeID   INTEGER,    -- Attribute
   componentBLOB     BLOB,       -- Value
   PRIMARY KEY objectID, componentTypeID
)

然后你也可以添加一个传统的" myObject"包含其他非blob值的表(例如它的标识列,所有者,名称,创建和修改的时间戳等等),并使用外键约束强制执行完整性。


EAV表非常灵活,适合快速查找Value列。

他们在另一个方向上非常贫穷; "给定值(或值的组合),哪些实体拥有它?"但是你似乎不太可能在搜索BLOB字段。

您可能想了解更多关于EAV的优缺点,有很多参考在线。


在您的情况下,此结构的好处是每行只有一个BLOB和(可能更重要的)它没有稀疏填充;您不会拥有容纳20个BLOB的行,但仅使用其中的四个BLOB。这样可以更容易地在内存中传输相关的行。