nomsdb和gundb有什么区别?

3
据我理解,这两个数据库似乎遵循几乎相同的原则。它们都支持离线场景、去中心化和灵活的数据模型。我看到的唯一真正的区别是noms实现了git的一些思想,从而允许自定义合并操作,而gun则实现了自动冲突解决。这是唯一的区别还是我漏掉了什么?

1
我能建议有足够权限的任何人添加一个noms标签吗?谢谢。 - Sam Texas
3个回答

5
主要区别在于一个味道美味,另一个你不应该放在嘴里。;) 开玩笑:
(1) noms始终存储整个修订历史记录,就像提到的git一样。而使用gun则是可选的。
(2) 它们都具有“开箱即用”的数据同步/合并功能,都可以支持DAG和Merkle树。这是gun的实现方式:http://gun.js.org/distributed/matters.html
(3) 对于运营问题,gun还支持可构建在自动算法之上的自定义合并算法。
(4) 我知道gun可以支持非定向或非循环图,也就是具有循环引用和双向关系的图。我不确定noms是否可以,或者我确定你可以,但如果这个功能是一流/易于使用的特性还是不确定。
(5) noms设计文档说它是“有效的CA”(关于CAP定理),这表明它不应与离线优先对等体一起使用。然而,我非常确定他们的意图是指noms是AP(离线优先),因为数据永远不会发生变异/更改(只能被附加,就像Datomic一样),它具有类似C的属性(但是作为开发人员如何访问数据并不一定是C)。这是gun的看法:https://github.com/amark/gun/wiki/CAP-Theorem 总之,从我的有限概述来看,它们似乎相似,都可以做到对方能做到的,但可能稍微容易一些:
(A) 如果您正在构建自己的区块链、审计日志或进行会计/银行业务,则使用noms会更容易。
(B) 如果您正在构建游戏、社交网络、移动应用程序或物联网网络,则使用gun会更容易。

2
NOMS 是一种“内容寻址”数据库(类似于 Camlistore),将结构化数据作为 Merkle DAG 存储。它提供了概率 B 树作为索引机制。由于这种结构,许多数据同步/合并问题可以“开箱即用”。我不完全确定 Gun 的内部结构,但我知道它采用了一套合并算法,例如操作转换来进行协调。

GunDB 是使用 Javascript 实现的。虽然 NOMS 有一个 JS 实现(Attic Labs 雇用了非常专业的 JS 工程师),但实现问题导致他们放弃了客户端 JS 支持。请参见我在 https://github.com/attic-labs/noms/issues/3120 上的抱怨。

我很想听听其他尝试过这两个工具的人的意见。


0

两个数据库几乎具有相同的原则。它们都支持离线场景,是分散式的,并且具有灵活的数据模型。 Noms 实现了一些来自 Git 的思想,从而允许自定义合并操作;而 Gun 则实现了自动冲突解决。


1
有点有趣,答案就是问题。 - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接