我正在开发管理由组件组成的对象的系统。 从性能角度将它们存储在SQLITE数据库中的最佳方法是什么?如果有20种组件类型 每个组件的大小为1-10Kb。通常,每个对象由4-6个不同的组件组成。
我可以看到两个选项:
我将对数据库进行的唯一查询是:通过id获取组件数据,写入数据并删除数据。
PS:对象类看起来像这样:
class Entity
{
Component *components[20];
}
通常组件数组有4-6个非空指针
答案 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。这样可以更容易地在内存中传输相关的行。