【问题标题】:Why is seperate Write and Read better?为什么单独的写和读更好?
【发布时间】:2012-09-05 02:46:11
【问题描述】:

我不明白为什么单独的读写比在一台服务器上读写更好。

比如我有一个mysql集群,有三台机器:node1、node2、node3。

一种可能的架构是:

  • 对 node1 的所有写入请求,但对 node2 和 node3 的所有读取请求。

第二种可能的架构是:

  • 所有这三个节点都处理写入和读取。

我们可以在架构一中看到对node1的写入压力非常大,所以我更喜欢架构二。

还有,mongodb为什么要把主节点的写和从节点的读分开。

【问题讨论】:

  • 请务必注意,MongoDB 不会将主节点和辅助节点的写入和读取分开,除非您使用 SlaveOK 或其他读取首选项告诉它。默认情况下,主节点将同时处理读取和写入。
  • @AndredeFrere 如果我想转储所有数据库,我应该使用什么地址,即 mongodump --host mongosServer:port 或 mongodump --host mongoDServer:port 如果我指示 mongoD 我不会转储所有的数据,我不知道是否表明 mongoS 是正确的提前谢谢
  • 可能不是最好的地方,但根据具体情况从mongodmongos 备份都是可行的策略。查看herehere 了解更多详情。
  • 一个奇怪的现象:我使用java客户端读取mongodb集群,发现所有读取在辅助节点(使用mongostat检查),但是当我登录辅助节点时,它告诉我:不是master和slaveok= false 所以我很奇怪为什么所有的读取都在这个二级上,但我不能在命令行查询。
  • 在连接上设置了读取首选项。您的 Java 应用程序可能设置了此读取首选项,但连接到 shell 是一个新连接,并且不一定具有与您的 Java 应用程序相同的设置。

标签: mysql mongodb cluster-computing


【解决方案1】:

这是 MySQL 和 MongoDB 的规模问题。在具有小数据集和低流量的最简单应用程序中,将所有写入和读取都转到一个服务器为您提供了一个简单的架构。在具有低容量写入的高容量读取应用程序中,复制到多个读取节点的单个写入节点使您能够通过添加另一个节点来扩展读取。在高读写量的应用程序中,您可能会考虑分片(在 MySQL 中您可以自己完成或找到帮助工具),在 mongodb 中您运行 mongos 为您处理分片。分片将根据您定义的某些键将记录放在特定实例上。该键将确定每条记录应存储在哪个实例上。您可以想象,分片管理比单个服务器进行读/写访问更复杂。你是对的,即使在像 mongodb 这样的情况下,一旦你定义了一个键(或只使用默认键),它就会为你进行分片。

【讨论】:

    【解决方案2】:

    MySQL 集群还支持自动分片 - 默认情况下对主键进行哈希处理,但用户可以输入自己的键以提供更多的分布意识。集群中的每个节点都是master,内部负载均衡会将负载分散到节点之间

    虽然级别很高,但此处发布的简短演示向您介绍了 MySQL 集群中的分片概念: http://www.oracle.com/pls/ebn/swf_viewer.load?p_shows_id=11464419

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-10
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多