当前位置: 首页 > 知识库问答 >
问题:

应用架构-CouchDB和MongoDB

齐琦
2023-03-14

我正在开发一个包含两种类型数据的应用程序

1)用户配置文件-用户名、电子邮件、用户ID、访问令牌、SessionID、AvatarUrl等。对于每个用户,此数据约为20kB,对于活跃用户,数据将被读取100次/天并写入5次/天。我正在考虑使用ObjectRocket(MongoDB)或Cloudant(CouchDB with Clustering)——我喜欢Cloudant的极端容错性(主/主复制、仅崩溃设计和Cloudant的多异地冗余),但我担心这么多文档修订会很快占用磁盘空间,总体上不会像MongoDB那样表现出色。我倾向于MongoDB。对这种数据类型有什么建议吗?

2)用户对用户交易-UserA向UserB发送8点---检查UserA的点数余额,如果

总的来说,为了简单起见,我想使用一种DB类型,但似乎有时要建房子,你需要一把锤子和一把螺丝刀。将Mongo(ObjectRocket)用于数据类型#1,将Coach(Cloudant)用于数据类型#2有意义吗?

共有2个答案

秦毅
2023-03-14

1) 在这种情况下,您不会使用太多磁盘空间,因为旧版本会定期删除,除非出现冲突,在这种情况下,这似乎不太可能。

2)这是您需要事务的地方,而CouchDB或Cloudant的最终一致性并不合适。我也不确定MongoDB是否提供了您需要的东西。这里最安全的选择是关系数据库。

冯翔
2023-03-14

1) 在Cloudant上,您无需担心以前编辑的磁盘空间——我们会自动触发压缩,以清理后台的旧的、无冲突的修订。

2)可以在CouchDB/Cloudant中对此进行建模,方法是为每个贷方或借方创建一个新文档,并使用映射缩减视图来生成帐户余额。CouchDB权威指南中描述了一个完整的示例。您的应用程序逻辑如下:

  1. 借记用户A
  2. 断言用户A有足够的贷项(例如,借记后仍有正余额)
  3. 信用用户B

如果2个或3个失败,请记入用户A并适当通知。

 类似资料:
  • 前面我们对基于 MINA 的服务端架构有了一个大体认识,现在我们看一下客户端的情况。客户端需要连接到一个服务端,发送消息并处理响应 客户端首先创建一个 IOConnector (用以连接 Socket 的 MINA Construct (构件)),开启一个服务器的绑定 在连接创建时,一个 Session 会被创建并关联到该连接 应用或者客户端写入 Session,导致数据在穿越 Filter Ch

  • 前面我们披露了基于 MINA 的应用架构。现在我们来关注一下服务器端架构。从根本上说,服务器端监听一个端口以获得连入的请求,将其进行处理然后发送回复。服务器端还会为每个客户端 (无论是基于 TCP 还是基于 UDP 协议的) 创建并维护一个 session,详见Chapter 4 - Session。 I/O Acceptor 监听网络以获取连入的连接或者包 对于一个新的连接,一个新的 sessi

  • 在我们深入了解Electron的API之前,我们需要探讨一下在Electron中可能遇到的两种进程类型。 它们是完全不同的,因此理解它们非常重要。 Electron Application Architecture Before we can dive into Electron's APIs, we need to discuss the two process types available

  • 问的最多的问题:”一个基于 MINA 的应用看起来像什么”?本小节我们将来了解一下基于 MINA 的应用架构。我们收集了一些基于 MINA 的演示信息。 架构鸟瞰图 这里,我们可以看到,MINA 是你的应用程序 (可能是一个客户端应用或者一个服务器端应用) 和基础网络层之间的粘合剂,可以基于 TCP、UDP、in-VM 通信甚至一个客户端的 RS-232C 串行协议。 你要做的仅仅是在 MINA

  • 这里我们提供了一个关于 Tendermint 区块链应用程序推荐架构的简要指南。 下图提供了一个极好的例子: 这里的最终用户应用程序是 Cosmos Voyager,在左下角。 Voyager 与本地轻客户端守护进程公开的 REST API 通信。轻客户端守护进程是一个特定于应用程序的程序,它与 Tendermint 节点通信,并通过 Tendermint Core RPC 验证 Tendermi

  • CodeIgniter应用程序的体系结构如下所示。 如图所示,每当请求到CodeIgniter时,它将首先转到index.php页面。 在第二步中, Routing将决定是将此请求传递到步骤3以进行缓存还是将此请求传递到步骤4以进行安全检查。 如果请求的页面已经在Caching ,则Routing将把请求传递给步骤3,响应将返回给用户。 如果Caching中不存在请求的页面,则Routing会将请