据我所知,这两个数据库似乎遵循几乎相同的原则。两者都支持离线方案,分散并具有灵活的数据模型。我看到的唯一真正的区别是,noms实现了git中的一些想法,并允许自定义合并操作,而gun实现自动冲突解决。
这是唯一的区别还是我错过了什么?
答案 0 :(得分:2)
主要区别在于,一个人尝起来很美味,另一个人不应该放在嘴里。 ;)开玩笑:
(1)noms总是存储整个修订历史,就像上面提到的git一样。使用枪时,这是可选的。
(2)他们都有"只是工作"数据同步/合并"开箱即用",两者都可以支持DAG和Merkle树。这是枪的方式:http://gun.js.org/distributed/matters.html。
(3)对于操作问题,gun还支持自定义合并算法,可以在自动合并算法之上构建。
(4)我知道枪可以支持非定向或非非循环图,也就是具有循环引用和双向关系的图。我不确定noms是否可以,或者我确定你可以,但是如果这样做是否是一流的/简单的功能。
(5)noms design doc说它是"有效的CA" (关于CAP定理),这表明它不应该与离线优先同伴一起使用。但是,我很确定他们的意思是什么意思是noms是AP(离线优先),因为数据永远不会改变/改变(只能附加,如Datomic)它具有类似C的属性(但是你如何访问作为开发人员的数据不一定是C)。以下是枪支:https://github.com/amark/gun/wiki/CAP-Theorem
总之,从我有限的概述看起来它们看起来很相似,两者都能做到对方可以做的事情,但可能会稍微容易一点:
(A)如果您正在构建自己的区块链,审计日志或进行会计/银行业务,那么noms会更容易。
(B)如果您正在构建游戏,社交网络,移动应用程序或物联网网络,那么枪将更容易。
答案 1 :(得分:1)
NOMS就是所谓的内容可寻址"数据库(如Camlistore),将结构化数据保存为Merkle DAG。它提供概率B树作为索引机制。由于这种结构,许多数据同步/合并问题起作用,开箱即用#34;。我并不完全确定Gun的内部结构,但我知道它采用了一套合并算法,例如Operational Transform来进行协调。
GunDB在Javascript中实现。虽然NOMS有一个JS实现(而Attic Labs聘请的工程师具有非常严肃的JS背景),但实现问题导致他们放弃了客户端JS支持。看到我抱怨https://github.com/attic-labs/noms/issues/3120
我很好奇地听到其他人试过这两个人。
答案 2 :(得分:-1)