据我所知,这两个数据库似乎遵循几乎相同的原则。两者都支持离线场景,都是分散的,并且都有一个灵活的数据模型。我看到的唯一真正的区别是,noms实现了git和by中的一些想法,允许自定义合并操作,而gun实现了自动冲突解决。
这是唯一的区别吗?还是我错过了什么?
发布于 2017-03-18 03:03:40
主要的区别是一种味道很好,另一种不应该放进嘴里。;)开个玩笑:
(1) nom总是存储整个修订历史,就像前面提到的git一样。而对于喷枪,这是可选的。
(2)它们都有“开箱即用”的"just works“数据同步/合并功能,都可以支持DAG和Merkle树。下面是gun如何做到这一点:http://gun.js.org/distributed/matters.html。
(3)对于ops问题,gun还支持自定义合并算法,这些算法可以在自动合并算法的基础上构建。
(4)我知道gun可以支持无向或非无环图,也就是具有循环引用和双向关系的图。我不确定not是否可以,或者我相信你可以,但是这是不是一流的/简单的特性。
(5) noms设计文档说它是“有效的CA”(根据CAP定理),这表明它不应该与离线优先的对等点一起使用。然而,我很确定他们的意思是,not是AP (离线优先),因为数据永远不会变/变(只能被追加,就像数据一样),所以它具有类似C的属性(但是作为开发人员访问数据的方式不一定是C)。以下是gun的摘录:https://github.com/amark/gun/wiki/CAP-Theorem
总而言之,从我有限的概述来看,它们似乎很相似,都可以做对方能做的事情,但可能更容易做到以下几点:
(A)如果您正在构建自己的区块链、审计日志或进行会计/银行业务,那么noms会更容易。
(B)如果您正在构建游戏、社交网络、移动应用程序或IoT网络,则使用gun会更容易。
发布于 2017-03-18 01:21:45
NOMS是所谓的“内容可寻址”数据库(如Camlistore),它以Merkle DAG的形式保存结构化数据。它提供了概率B树作为索引机制。由于这种结构,许多数据同步/合并问题“开箱即用”。我不完全确定Gun的内部结构,但我确实知道它使用了一套合并算法,例如用于协调的操作转换。
GunDB是用Javascript实现的。虽然NOMS有一个JS实现( Attic Labs雇佣了具有非常严肃的JS背景的工程师),但实现问题导致他们放弃了对客户端JS的支持。看我在https://github.com/attic-labs/noms/issues/3120上抱怨
我很好奇是否有人同时尝试过这两种方法。
发布于 2016-10-06 16:08:51
这两种数据库的原理几乎相同。两者都支持离线场景,都是分散的,并且都有一个灵活的数据模型。noms实现了git和by中的一些思想,允许自定义合并操作,gun实现了自动冲突解决。
https://stackoverflow.com/questions/39890721
复制相似问题