我有一个存储在数据库中的特定对象类型。此类型现在获得与其关联的附加信息,这些信息在实例之间将有所不同。虽然对于实例组,信息的结构相同,但结构只能在运行时知道,并且会随着时间的推移而变化。
我决定只在表中添加一个blob字段,并以某种序列化格式存储键/值对。根据您的经验,最合适的格式是什么?
在我的应用程序环境中,此存储空间是次要的。我想要快速执行一个特定的操作,即为给定的一组键/值对查找正确的实例(因此它是一种可变字段组合键)。我想这意味着,是否有一种格式在典型的数据库索引中表现得特别好?
此外,我可能有兴趣寻找一组共享同一组密钥的实例(如果您愿意,可以使用特殊的“类”)。
我用Java写这个,我存储在各种类型的SQL数据库中。我已经在我的雷达上获得了JSON,GPB和本机Java序列化,支持跨语言格式。我可以想到两个基本策略:
答案 0 :(得分:1)
不是您问题的答案,但您是否考虑过查看Java Edition of BerkeleyDB?可以使用此(快速)引擎存储重复键和序列化值。
答案 1 :(得分:1)
如果您的目标是利用数据库索引,那么将非结构化数据存储在BLOB中将不会有效。从RDBMS的角度来看,BLOB基本上是不透明的。
我从你的描述中收集到,数据的非结构化部分采用与对象关联的任意一组键值对的形式,对吧?好吧,如果所有键的类型相同(例如它们都是字符串),我建议只创建一个包含(至少)三列的子表:键,值和父键的外键对象在其表中的行。由于密钥将作为常规列存储在数据库中,因此可以有效地对其进行索引。索引还应包括父表的外键。
完全不同的方法是查看像CouchDB这样的“无模式”数据库引擎,该引擎专门用于处理非结构化数据。我对这些系统没有任何经验,我不知道你的应用程序的其余部分是否适合这种替代存储策略,但它可能值得研究。