no-sql如何处理关系数据?
Posted
技术标签:
【中文标题】no-sql如何处理关系数据?【英文标题】:How does no-sql handle relational data? 【发布时间】:2013-11-12 15:57:14 【问题描述】:我知道它是一个非关系型数据库,但这并不意味着关系型数据不存在。
例如,我有一个表格,其中包含这样的网址(简化):
url | domain
我有一个包含这样的域的表(简化):
domain | favicon_path
因为很多不同的 url 可能有相同的域,所以我不想在拉取数据发送到视图时为每个域重复 favicon_path。
因此,当我需要数据时,我使用了一个简单的(例如简化的)连接命令。
"SELECT bookmarks.*, domains.favicon FROM bookmarks JOIN
domains ON bookmarks.domain=domains.domain"
我将如何使用 no-sql 处理这种情况?
我计划在客户端 (javascript) 上使用 indexedDB
和在服务器 (java) 上使用 MongoDB
实现 no-sql。
【问题讨论】:
techrepublic.com/blog/the-enterprise-cloud/… developer.mozilla.org/en-US/docs/IndexedDB/… en.wikipedia.org/wiki/Database_transaction en.wikipedia.org/wiki/Object_database en.wikipedia.org/wiki/NoSQL 【参考方案1】:如果你想使用面向文档的数据库,你可以使用这种文档结构:
URL_ID: “域”:“id_of_domain”, “另一个员工”:“……”
DOMAIN_ID: "favicon_path" : "另一个文档的路径或 id", “另一个员工”:“……”
所以你可以通过 id 从数据库中获取带有 URL_ID 的文档,然后获取 Domain 类型的文档。
补充: 您可以使用以下方法生成 id。创建只有一个字段的特殊文档(如序列) - current_value_of_sequence。每次插入 DB,您都必须获取此序列并增加它。一些像 Couchbase 这样的数据库对这种机制有低级支持,非常高效且线程安全。
【讨论】:
你所说的“员工”是什么意思……是“财产”的同义词 抱歉俚语。我的意思是你的对象的另一个字段,或者就关系数据库而言,你的表的另一个列(因为面向文档的数据库中的文档就像关系数据库中的行)。 no-sql 可以处理 id 生成,它可以扩展我从 mysql 传入的 id 吗? 在大多数情况下,数据库之间的传输是自己制作的,实际上并不难。【参考方案2】:根据在 IT 领域多年的工作经验,我想说大多数业务模型都可以像这两种类型的数据结构一样简单地标准化:
-
实体信息。
实体列表。
例如,在书店业务中,我们将拥有 Book 实体,以及许多包含所有书籍或整个书籍子集的列表。
对于 NoSQL 数据库,例如Redis 或SSDB,Book 实体以 Key-Value 的形式存储,其中 key 是 book sn,value 是字符串化的 book info(title,publish date, description, ETC)。而书单(按出版日期列出,按价格列出等)存储在 zset 数据类型中。
【讨论】:
以上是关于no-sql如何处理关系数据?的主要内容,如果未能解决你的问题,请参考以下文章