我正在开发管理由组件组成的对象的系统。从性能角度看,将它们存储在SQLITE数据库中的最佳方法是什么?,如果有20种组件类型,每个组件的大小为1~10 is。通常,每个对象由4-6个不同的组件组成。
我可以看到两种选择:
我将对数据库进行的唯一查询是:按id获取组件数据、写入数据和删除数据。
PS: object类如下所示:
class Entity
{
Component *components[20];
}
通常,组件数组有4-6个非空指针。
发布于 2015-03-07 11:06:23
您可能需要一个实体属性值结构来存储BLOB。
CREATE TABLE myObjectComponents (
objectID INTEGER, -- Entity
componentTypeID INTEGER, -- Attribute
componentBLOB BLOB, -- Value
PRIMARY KEY objectID, componentTypeID
)
然后,您还可以使用其他非blob值添加一个传统的"myObject“表(例如它的标识列、所有者、名称、创建和修改的时间戳等),并使用外键约束强制执行完整性。
EAV表非常灵活,有利于快速查找值列。
它们在相反的方向上非常差;“给定一个值(或值的组合),哪个实体拥有它?”但你似乎不太可能在搜索BLOB字段。
您可能需要阅读更多关于EAV的优点和优点的文章,网上有大量的参考资料。
这种结构在您的例子中的好处是,每行只有一个BLOB,而且(可能更重要的一点)它并不是人烟稀少;您将不会有容纳20个BLOB的行,但是只使用其中的4个。这将使在内存中传递相关行变得更容易。
https://stackoverflow.com/questions/28913902
复制相似问题