我刚刚在亚马逊的S3和CouchDB上读了大量的资料。也许还不够,所以我的问题是:
这两个系统听起来都很吸引我。CouchDB是使用Apache许可证V2分发的,而使用Amazon的S3,你要按存储的兆字节和你产生的流量付费。所以在金钱上有一点区别。
但是从技术的Angular 来看,据我所知,这两个系统都可以帮助您存储任意大小的非结构化数据(这取决于我从CouchDB中了解到的底层操作系统)。
我不知道为这两个应用程序提供一个统一的接口有多容易,这样您就可以根据需要更改“数据存储提供程序”,而不必更改任何代码。
我也不知道这在技术上是否可行,还没有详细研究他们的协议,但最好能推迟到尽可能晚的时候。
此外,这对于集成测试也很有意义:例如,您可以针对本地CouchDB示例进行测试,并针对S3运行代码以供生产使用。
从另一个Angular 提出我的问题:亚马逊的S3和CouchDB本质上解决的是完全相同的问题,还是这是疯狂的,我错过了整个重点?
更新的问题
在吉姆的精彩回答之后,让我把问题重新表述为:
“CouchDB和Amazon SimpleDB的通用接口”
按照同样的思路,您是否发现CouchDB和SimpleDB之间的公共接口存在问题?
4条答案
按热度按时间guz6ccqo1#
你没有抓住重点,只是有点。CouchDB是一个数据库。S3是一个文件系统。它们都是相对非结构化的,但是S3是在键下存储文件,而CouchDB是在键下存储(任意结构的)数据。
类似于CouchDB的Amazon Web服务将是Amazon SimpleDB。
Ruby中已经存在类似您所寻找的东西,它被称为Moneta,它甚至可以在S3上存储内容,这可能正是您所需要的。
xj3cbfub2#
你错了,Jim。S3不是一个文件系统。它是一个键值存储的Web服务。
Amazon为您提供了一个键。是的,该键的值可以是代表文件的数据。但是,如何在Amazon系统中管理它是完全不同的。它可以存储在一个节点、多个节点、具有cloudfront的地理战略节点、等等。在那个键中没有任何东西本身指示系统将如何管理文件。键的值从来不直接是一个文件。它是代表文件的数据,而该值最终如何被解析成客户端接收的文件则是完全独立的。
该键的值实际上可以是不代表文件的数据,也可以是JSON字典,从这个意义上讲,S3可以像CouchDB一样使用。
所以我不认为这个问题没有抓住要点。事实上,这是一个完全合理的问题,因为CouchDB中的数据没有分布在节点之间。这可能会影响性能。
让我们甚至不谈亚马逊SimpleDB。这是一个单独的东西。请不要混合术语,然后根据它来进行声明。
如果您不相信这个说法,并且如果有人要求,我很乐意提供一个代码位来说明S3中的JSON字典。
吉姆,我尊重你对其他问题的回答。但是,在这里,你显然错了,看不出这些观点是有道理的。
g6baxovj3#
从技术上讲,一个公共层是可能的。但是我怀疑这是否有意义。Couchdb为你的文档集成了map/reduce函数,这些函数以“视图”的形式公开。我不认为SimpleDB有类似的功能。另一方面,SimpleDB有查询表达式,而Couchdb没有。当然,如果你在开发时知道你的查询,你可以在Couchdb中将这些表达式建模为视图。
除此之外,通用功能仅限于创建/更新/删除密钥-文档对。
ee7vknir4#
这是一个老问题,但它首先出现在我的搜索。
PouchDB是一个完全兼容的CouchDB接口,它的后端使用LevelDown。它能够使用任何LevelDown兼容的接口。
S3 LevelDown是一个Level Down兼容接口,它使用S3作为其后端存储。
https://github.com/loune/s3leveldown
理论上,可以将它们放在一起创建一个完全CouchDB风格的实现,并由S3支持。
https://github.com/loune/s3leveldown/tree/master/examples/pouchdb