我正在寻找实现无架构数据存储设计的方法。但是,通常术语无架构在NoSQL学校的上下文中使用。我对NoSQL的可伸缩性优势不感兴趣。一个例子是朋友的方式(如布雷特泰勒博客中所述)。您能否指出一些其他资源或设计实例/案例研究,其主要目的是实现灵活/无架构设计(我甚至可以牺牲性能)?
答案 0 :(得分:2)
我对你的用例并不是100%肯定,你能分享一些关于你想要做什么的更多信息吗? 当你说你对“NoSQL”不感兴趣时,这意味着你必须在关系数据库之上实现所有东西吗? (哪一个?)
有几种方法可以使关系模式更加灵活:
EAV / Entity-Attribute-Value设计,其中一个表存储有关系统中所有“实体”/对象的公共信息,一个表包含有关这些实体可以拥有的属性的信息以及一个存储的表(entity_id) ,attribute_id,value)。例如,请参阅http://en.wikipedia.org/wiki/Entity-attribute-value_model。
“瘦表”,其中有宽表,每列类型有一列(一个varchar列,一个blob列,一个int列等),然后只填充与您的值类型匹配的列想要存储。当您只想存储不同类型的值而不是动态更改属性时,这是有意义的。可用于在EAV架构中存储属性。
存储“三重”数据:语义网人花了相当多的时间研究如何最好地存储RDF数据,包括主题 - 关系 - 对象三元组。有“真正的”RDF存储具有自己的查询语言,但其中一些可以使用关系数据库作为存储后端。如果这听起来像是要走的路,请看一下:http://www.w3.org/2003/01/21-RDF-RDB-access/ - 一个简单的Google查询“将rdf存储在关系数据库中”应该指向几个有效映射到关系数据库的Triplestore实现
希望这有帮助!
答案 1 :(得分:1)
您可能需要查看Berkeley DB。它提供了一个无模式的简单键值API(ala NoSQL),是一个直接链接到您的应用程序的库。 Berkeley DB的好处在于你可以吃蛋糕并吃掉它。它提供了开发人员正在寻找的简单,灵活,可嵌入的数据存储,但它也非常快速,可扩展且可靠。
除了基本键/值对API之外,Berkeley DB还提供了另外两个开发人员友好的API:Java Collections API和Direct Persistence Layer API(类似POJO的持久性API)。
大多数BDB应用程序开发人员使用最适合应用程序表示数据的API。 C和C ++结构通常存储为简单,不透明的键/值对,其中Java集合显然与该API很好地匹配,Java类与DPL API很好地匹配。
祝你的搜索顺利。