【问题标题】:Node and Deno servers accessing the same MySQL databaseNode 和 Deno 服务器访问同一个 MySQL 数据库
【发布时间】:2020-09-07 20:05:01
【问题描述】:

我想测试 Node 和 Deno,并尝试通过代理将用户重定向到一个 MySQL 数据库。

它将如何影响数据库?

是否会通过 CRUD 操作出现一些时间戳冲突,或者 MySQL 是否有某种机制来处理来自多个服务器的连接?

RAM 中数据库的性能或内存占用情况如何?它是否会占用与只有一台服务器请求数据库对某些内容进行 CRUD 一样的空间?

如果我添加了另一台将连接到数据库的服务器,例如 java 或 Go 服务器,会发生什么?

【问题讨论】:

  • 时间戳通常由数据库生成。来自不同客户端的多个连接是数据库集群的常见用例,但请注意 MySQL 不符合 ACID(请参阅:dba.stackexchange.com/questions/177569/is-mysql-acid-compliant)。客户端的编程语言对数据库无关紧要。关于您的 RAM 部分,如果不了解您的负载,这很难说。我建议对其进行测试并使用实际工作负载来查看它,并相应地调整机器配置以适应您的工作负载。
  • 谢谢。在现实世界的例子中,ACID 合规性意味着什么?我不是大公司。我的用例是用户编写和编辑他们自己帖子的行,只有管理员(来自另一个应用程序/服务器)可以同时编辑他们的记录。 98% 的时间都是 POST 请求。这不是一个实时应用程序,可能发生的最糟糕的事情是在同时发布内容或其他内容时具有相同的主键,例如帖子的 id。但我认为这是由 MySQL 内部处理的,对吧?
  • POST 是一个 HTTP 请求,与数据库上的 sql 查询无关。所以我假设您的意思是您的应用程序会将 http 请求转换为写入数据库的查询。请参阅How do ACID and database transactions work? 上的以下链接,以了解如果您有多个客户使用您的数据库意味着什么。
  • 这只是为了说明我在数据库中主要是读取而不是写入。这就是我选择 MySQL 而不是 PosgreSQL 的原因。 Posgres 现在更流行,但 MySQL 比 PosgreSQL 对读取的内存需求更少。如果我不得不做更多的写入,我会选择 Posgres,你可以用较弱的硬件做更多的事情。你对酸的东西有一两句话的解释吗?有没有一些表格或图表来说明现实世界中的那些东西,比如内存、CPU、req/s 等?
  • RDBMS 的 RAM 消耗取决于许多因素,例如查询复杂性、连接大小等等。没有人可以给你一个明确的答案。如前所述,无论您使用 MySQL 还是 PostgreSQL,我都建议您对其进行测试并调整您的机器。

标签: mysql node.js database go deno


【解决方案1】:

除了有任何其他并发进程连接到它之外,它实际上不会对数据库产生任何影响。

这不是deno 问题,而是数据库问题。

即使您当前的单个 Node.js 实例也可能发生完全相同的问题,因为如今所有系统的本质都是并发/并行。

您不妨将 Deno 应用程序替换为另一个 Node.js 实例、Java 等。甚至是您当前的 Node.js 应用程序。

数据库中的数据在您将其加载到客户端后可能会发生变化,由您来实现处理此类场景的代码。

MySQL 不是“ACID”这一事实本身既不否定也不相关,因为它没有上下文。

如果您需要注册表的完全绝对完整性,请确保在select 时将其锁定,但需要权衡取舍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    相关资源
    最近更新 更多