为什么你不应该使用 nosql 进行金融交易
Why you should not use nosql for financial transaction
我在一家银行组织的 Hackaton 活动中听一位演讲者说,出于安全原因,您不应在金融交易中使用 nosql。但我不知道他在说什么。我一直在寻找关于为什么我不应该在我的应用程序中使用 nosql 数据库的答案。
没有sql的优点和缺点是什么,sql金融交易数据库的优点和缺点是什么?
现在,我正在为商店收银员构建一个应用程序,收银员将使用此应用程序来存储交易、接收订单以及使用现金或信用卡接收付款。
这个项目的 API 的最佳方法是什么? SQL 或否SQL,为什么?
也许我认为原因之一是 "nosql doesn't support ACID"
同样是没有交易
也许可以解释为什么 "financial transation".
不使用 nosql
SQL 和 NoSQL 数据库不可互换。没有银弹数据库技术。在为项目选择要使用的数据库技术时,您应该考虑利弊。
简答:如果您需要处理交易,您的数据可以很好地安排在关系实体中然后使用SQL。如果您需要处理大量的半结构化或非结构化数据,并且需要横向扩展,那么使用NoSQL。
如果您想详细了解 SQL 和 NoSQL 之间的差异,请单击 here or here.
关于何时使用 SQL 或 NoSQL 的一些见解可以找到 here.
正如@A2H 所解释的那样,SQL 和 NoSQL 取决于您的要求,说 NoSQL 不安全是不准确的,这就像说 SQL 不可扩展...这也不是真的。
现在,对于财务应用程序,您将有一些非功能性需求,我可以在下面列出:
- 文件级安全:如果有人可以访问数据库文件,他们是否可以使用它来将信息加载到其他地方?例如,在SQL服务器中,文件中包含有关数据库的登录信息,因此在没有密码的情况下复制文件将很难让黑客窃取信息。
- 可扩展:我们在谈论多少?几百万条记录?在何种意义上可扩展,您是否需要根据区域和帐户信息的中央表进行分布式查询或仅本地化数据库?或者您打算创建一个每秒接收大量记录(如外汇信息)的应用程序,因此您需要一些东西来摄取大量记录并分析结果?在那种情况下,也许 NoSQL 适合你。
- 事务 (ACID) 投诉:您是否处理事务(例如借记贷记的类型?)那么您可能需要使用 Djondb 或传统 RDBMS 之类的东西,它们都支持事务。
- 灵活的模式:您需要一种灵活的模式来适应您的频繁更改,而无需重新设计数据库和更新以前的记录吗?没有SQL擅长这个
列表将继续......但我想你明白了......
说 NoSQL 是不安全的是言过其实,就像任何其他概括一样。
在支付、账户间转账、股票市场交易等场景中,我们需要严格的 ACID。即使是简单的事情,比如我想查看我的账户余额(100 美元)并提取 90 美元,但在我提取之前,我的妻子提取了 80 美元。所以银行最终在我的账户中出现负余额,这可能违反了银行不允许负余额的一些规则。
那么我们该怎么办呢?关系数据库提供出色的 ACID 和数据库锁定工具。人们也可以在 MongoDB 中进行黑客攻击,但黑客攻击仍然是一种黑客攻击。 MongoDB 提出了 ACID 等,但在一个没有强一致性的基于分布式分片的系统中,我会远离它。
最后,在服务器端应用程序的微服务架构时代,我们每个服务都有一个数据库(我的意思不是专用的物理数据库,而是逻辑上每个服务一个数据库)。所以有两个数据库很简单;一个 MongoDB 和一个关系。将关系用于事务性的东西,这将仅占用例的 10%。对其余用例使用 MongoDB,例如浏览数据、图像、阅读评论、内容、帐户历史记录等。因此,由于超过 90%+ 的大多数用例将基于 MongoDB,因此仍然实现高可扩展性的目标。
我在一家银行组织的 Hackaton 活动中听一位演讲者说,出于安全原因,您不应在金融交易中使用 nosql。但我不知道他在说什么。我一直在寻找关于为什么我不应该在我的应用程序中使用 nosql 数据库的答案。
没有sql的优点和缺点是什么,sql金融交易数据库的优点和缺点是什么?
现在,我正在为商店收银员构建一个应用程序,收银员将使用此应用程序来存储交易、接收订单以及使用现金或信用卡接收付款。
这个项目的 API 的最佳方法是什么? SQL 或否SQL,为什么?
也许我认为原因之一是 "nosql doesn't support ACID"
同样是没有交易
也许可以解释为什么 "financial transation".
不使用 nosqlSQL 和 NoSQL 数据库不可互换。没有银弹数据库技术。在为项目选择要使用的数据库技术时,您应该考虑利弊。
简答:如果您需要处理交易,您的数据可以很好地安排在关系实体中然后使用SQL。如果您需要处理大量的半结构化或非结构化数据,并且需要横向扩展,那么使用NoSQL。
如果您想详细了解 SQL 和 NoSQL 之间的差异,请单击 here or here.
关于何时使用 SQL 或 NoSQL 的一些见解可以找到 here.
正如@A2H 所解释的那样,SQL 和 NoSQL 取决于您的要求,说 NoSQL 不安全是不准确的,这就像说 SQL 不可扩展...这也不是真的。
现在,对于财务应用程序,您将有一些非功能性需求,我可以在下面列出:
- 文件级安全:如果有人可以访问数据库文件,他们是否可以使用它来将信息加载到其他地方?例如,在SQL服务器中,文件中包含有关数据库的登录信息,因此在没有密码的情况下复制文件将很难让黑客窃取信息。
- 可扩展:我们在谈论多少?几百万条记录?在何种意义上可扩展,您是否需要根据区域和帐户信息的中央表进行分布式查询或仅本地化数据库?或者您打算创建一个每秒接收大量记录(如外汇信息)的应用程序,因此您需要一些东西来摄取大量记录并分析结果?在那种情况下,也许 NoSQL 适合你。
- 事务 (ACID) 投诉:您是否处理事务(例如借记贷记的类型?)那么您可能需要使用 Djondb 或传统 RDBMS 之类的东西,它们都支持事务。
- 灵活的模式:您需要一种灵活的模式来适应您的频繁更改,而无需重新设计数据库和更新以前的记录吗?没有SQL擅长这个
列表将继续......但我想你明白了......
说 NoSQL 是不安全的是言过其实,就像任何其他概括一样。
在支付、账户间转账、股票市场交易等场景中,我们需要严格的 ACID。即使是简单的事情,比如我想查看我的账户余额(100 美元)并提取 90 美元,但在我提取之前,我的妻子提取了 80 美元。所以银行最终在我的账户中出现负余额,这可能违反了银行不允许负余额的一些规则。
那么我们该怎么办呢?关系数据库提供出色的 ACID 和数据库锁定工具。人们也可以在 MongoDB 中进行黑客攻击,但黑客攻击仍然是一种黑客攻击。 MongoDB 提出了 ACID 等,但在一个没有强一致性的基于分布式分片的系统中,我会远离它。
最后,在服务器端应用程序的微服务架构时代,我们每个服务都有一个数据库(我的意思不是专用的物理数据库,而是逻辑上每个服务一个数据库)。所以有两个数据库很简单;一个 MongoDB 和一个关系。将关系用于事务性的东西,这将仅占用例的 10%。对其余用例使用 MongoDB,例如浏览数据、图像、阅读评论、内容、帐户历史记录等。因此,由于超过 90%+ 的大多数用例将基于 MongoDB,因此仍然实现高可扩展性的目标。