【问题标题】:Is nosql Database good for Online Money Transaction managementnosql 数据库对在线货币交易管理有好处吗
【发布时间】:2011-09-13 09:23:00
【问题描述】:

我打算使用 nosql 数据库作为我的 Web 产品的后端。我有一些非常基本的疑问。

1) 我在博客中读到 Nosql 数据库不太适合在线货币交易,即数据完整性最重要的地方。(我的产品有在线货币交易)

2) 每天至少有 1000 名用户。

3)可用性会成为问题吗?

能否请您说明与 Nosql 数据库相关的更多利弊。我打算使用 MongoDb。这能满足我上面的查询吗?

我的问题是清楚的还是我需要提供更多信息? 请发表评论,我会做出必要的更改。

【问题讨论】:

  • 强烈建议在此类系统中进行交易。你可以用 nosql 模拟事务,但你会发明轮子。
  • @varela:能否请您详细说明您的观点,我无法理解您到底要说什么。
  • 最大的问题是并发。例如,如果您想要 substruct money,那么您不能只 1)检查可用金额 2)如果用户有钱则 substruct。您需要先使用特殊标志锁定用户帐户的更改,然后再进行操作。使用 SQL 数据库,您可以使用标准方法来执行此操作。
  • 这取决于你想做什么。 MongoDB 支持原子操作,但如果您的更新不能在一个操作中完成,则可能会出现问题。它与金钱操作无关,而是mongoDB的概念。 mongodb.org/display/DOCS/…
  • @Akash,您想在后端使用 NoSQL 数据库的原因是什么?就为了学?因为它很酷?还是有实际的好处?但即使你去尝试,看看比 MongoDB 更可靠的东西(例如 Riak)。 /litius

标签: nosql


【解决方案1】:

NoSQL 数据库可以解决几个问题,主要是:

  • (嗡嗡声)BigData => 想想 TB、PB 等。

  • 使用 分布式系统 / 数据集 => 假设您有 42 个产品,因此其中 13 个将位于芝加哥数据中心,21 个在纽约,另一个和 8 个在日本某个地方,但有一次您查询所有 42 种产品,您不需要知道它们的位置:NoSQL DB 会。这也允许使用更多的脑力(服务器)来解决困难的计算问题[似乎不适合您的用例,但值得注意的是一件有趣的事情]

  • 分区 => 让您的数据库易于分布,除了日本那些很酷的 8 种产品外,还可以轻松复制数据,因此这 42 种产品的复制系数为例如,3,这意味着您的数据库将为 每个 产品提供 3 个副本。因此,如果出现问题,没问题 => 这里有一个可用的副本。这就是 NoSQL 数据库与 RDBMS 相比真正大放异彩的地方。当然,您可以对 Oracle / MySQL / PostgreSQL / 等进行分片、分区和集群。但这是一个要复杂几个数量级的过程,并且对于您雇用的大多数人来说通常是一个令人头疼的维护问题。

(对你的问题)

  • 每天至少有 1000 名用户

    每天 1000 个用户是极低的数量,除非您选择昨天凌晨 3 点编写的 NoSQL 解决方案作为证明概念,否则这里应该不用担心。但如果你成功了,并且在几个月内拥有 100,000,000 个用户,那么 NoSQL 的扩展性会更简单。

  • 可用性会成为问题吗?

    可靠的 NoSQL 解决方案允许您指定称为 quorum 的内容:“在读取或写入请求被视为成功之前必须响应的副本数量”。一些解决方案还执行称为hinted handoff 的操作:“相邻节点临时接管故障节点的存储操作”。一般来说,您应该能够根据自己的要求控制可用性。

(来自您的 cmets)

  • 我们正计划扩展。并且不希望数据库成为约束

Expanding 是一个非常相对的术语。 “金融业相当扩张”,他们仍然主要使用 RDBMS 进行日常运营。 Facebook 使用 MySQL。我工作过的主要银行使用 Oracle / MySQL / PostgreSQL / DB2 / etc.. 并且只有其中一些使用 NoSQL,但不适用于一直需要 100% 一致性的数据。甚至 Facebook 也仅将 Cassandra 用于“收件箱搜索”之类的事情。但是,如果通过扩展意味着更多的数据和更多的用户(请求、连接等),NoSQL 将更容易扩展。同样,这并不意味着您不能扩展 RDBMS,它只是更加乏味/复杂。

  • 根据我的阅读,在任何 SQL 数据库中,我们都不必过多考虑架构

根据我的经验,如果我构建了一个好的系统,我总是必须考虑架构。 NoSQL 数据库允许您对持久化的数据更加灵活,但这并不意味着您应该更少考虑架构。例如,考虑对数据进行索引,或将其分片到多个集群,甚至是您可能向客户端公开的合约/接口等。

  • NoSQL 数据库所需的维护非常少

我不会说这是真的,除非我们正在谈论大数据。以 PostgreSQL 为例。这是一款非常棒的软件,非常易于使用和维护。 RDBMS 世界的另一个优点 => 人们对 SQL 感觉很多更舒服。出于这个原因,例如,Cassandra 家伙在 0.8 中发布了CQL,这是 SQL 的一个非常有限的子集。 maintenance 等术语也应该与TalentKnowledgeExpertise 等术语并列。因为如果你使用 Cassandra,例如,那个女孩是一个非常“高维护”的人,但对于来自 DataStax 的拥有Expertise 的人来说却不是这样,但你必须为此付费。

你的主要问题

  • 我在博客中读到 NoSQL 数据库不太适合在线货币交易,即数据完整性最重要的地方。(我的产品有在线货币交易)

如果不真正了解您的产品是什么,很难说 NoSQL 数据库是否适合/不适合。如果产品的主要目标是“在线货币交易”,那么我建议反对 NoSQL 数据库(至少在 2011 年的今天)。如果“在线货币交易”只是需求之一,而不是你产品的“核心”,那要看“核心”是什么,你绝对可以试试NoSQL数据库,比如使用外部服务来处理(例如 Google Checkout 等)保证您的交易的一致性。

作为技术说明,如果您尝试解决的问题受益于通过分发解决,我会推荐使用 Erlang 编写的数据库(例如 Riak、CouchDB 等),因为 Erlang 作为一种语言已经成功解决几十年来大部分分布式的东西。

【讨论】:

  • 非常感谢……这真是太棒了。这太好了。如果我能给它 100 次升级,我会...
  • @Akash,当然,非常欢迎。祝您使用或不使用 SQL 构建一个出色、可靠的系统:) /Anatoly
  • Facebook 不使用 MySQL。它使用 NoSQL 解决方案。
  • 当然是 Facebook uses MySQL。还有 MySQL thinks so。它还曾经使用 Cassandra 进行收件箱搜索,现在是 replaced with HBase
【解决方案2】:

MarkLogic 是一个带有 ACID 交易的 NoSQL 数据库,用于管理游戏中的虚拟货币以及现实生活中的银行交易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-09
    • 2022-06-23
    • 2010-10-11
    • 2020-11-21
    • 2012-09-22
    • 1970-01-01
    • 2011-09-06
    • 2016-10-04
    相关资源
    最近更新 更多