什么是nomsdb和gundb之间的区别

时间:2016-10-06 08:04:43

标签: javascript database git gun

据我所知,这两个数据库似乎遵循几乎相同的原则。两者都支持离线方案,分散并具有灵活的数据模型。我看到的唯一真正的区别是,noms实现了git中的一些想法,并允许自定义合并操作,而gun实现自动冲突解决。

这是唯一的区别还是我错过了什么?

3 个答案:

答案 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)

两个数据库的原理几乎相同。 两者都支持离线方案,分散并具有灵活的数据模型。 noms实现了git中的一些想法,允许自定义合并操作和枪支实现自动冲突解决。