为什么不应该在金融交易中使用NoSQL

10

我在一家银行组织的黑客马拉松活动上听到一个演讲者说,由于安全原因,不应该在金融交易中使用NoSQL。但我不知道他在说什么。我一直在寻找答案,想知道为什么不应该在我的应用程序中使用NoSQL数据库。

NoSQL和SQL数据库有哪些优缺点?对于金融交易而言,它们各有什么优缺点?

现在,我正在开发一个商店收银员应用程序,收银员将使用此应用程序存储交易、接收订单并使用现金或信用卡进行付款。

对于这个项目的API,最好的方法是使用SQL还是NoSQL?为什么?

4个回答

10
如@A2H所解释的那样,SQL和NoSQL取决于您的需求,说NoSQL不安全是不准确的,这就像说SQL不可扩展一样…这也不正确。对于金融应用程序,您将有一些非功能性要求,我可以列出以下内容:
- 文件级安全:如果某人可以访问数据库文件,他们能否使用该文件将信息加载到其他地方?例如,在SQL Server中,有关数据库的登录信息包含在文件中,因此复制没有密码的文件将使黑客很难窃取信息。 - 可扩展性:我们谈论多少?数百万条记录?从什么意义上来说具有可扩展性,需要执行分布式查询还是只需根据区域创建本地化数据库和用于账户信息的中央表?或者,您计划创建一个将每秒接收大量记录(如外汇信息)的应用程序,因此您需要一些东西来摄取大量记录并分析结果?在这种情况下,也许NoSQL适合您。 - 事务(ACID)符合:您是否正在处理交易(例如借记此信用此其他类型的交易)?那么您可能需要使用诸如Djondb或传统RDBMS之类的东西,两者都支持事务。 - 灵活的模式:您需要一个灵活的模式,可以根据您的频繁更改而自适应,无需重新设计数据库并更新以前的记录吗?NoSQL在这方面很擅长。
清单将继续…但我想您已经明白了…称NoSQL不安全是言过其实,就像其他一般化描述一样。

可扩展性完全取决于您所需的规模。使用当前云应用技术,NoSQL将进一步扩展。但是,如果需要用于商业目的,不要过度扩展。 - GDub

6

SQLNoSQL数据库不能互换使用。没有万能的数据库技术。在选择用于项目的数据库技术时,您应该考虑优缺点。

简短回答:如果您需要处理事务并且您的数据可以很好地排列在关系实体中,则使用SQL。如果您需要处理大量半结构化或非结构化数据,并且需要水平扩展性,则使用NoSQL

如果您想了解更多有关SQLNoSQL之间差异的信息,请单击此处此处

有关何时使用SQLNoSQL的一些见解可以在此处找到:此处


2
在进行付款、账户之间的转账、股票交易等场景中,我们需要严格的ACID。即使是像我想查看我的账户余额(100美元)并取出90美元这样简单的事情,但在我可以取出之前,我的妻子已经取出了80美元。因此,银行账户出现负余额,这可能违反了银行不允许负余额的规定。
那么我们该怎么办呢?关系型数据库提供了优秀的ACID和数据库锁定工具。你也可以在MongoDB中进行一些hack操作,但是这仍然是hack操作。MongoDB正在推出ACID等功能,但在一个分布式分片系统中没有强一致性,我会远离它。
最后,在服务器端应用程序的微服务架构时代,我们有每个服务一个数据库(不是专用的物理数据库,而是逻辑上的一个数据库)。因此,很容易拥有两个数据库:一个是MongoDB,另一个是关系型数据库。使用关系型数据库处理交易相关的内容,这只占到了10%左右的使用情况。使用MongoDB处理其余的使用情况,比如浏览数据、图像、阅读评论、内容、账户历史记录等等。因此,由于大多数使用情况都是基于MongoDB的,所以仍然可以实现高可伸缩性的目标。

0
也许我认为其中一个原因是“nosql不支持ACID”。
这意味着没有事务。
也许这可以解释为什么不使用nosql进行“金融交易”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接