在 Cassandra 中,我通过定义一个或多个主机连接到集群,因此如果其中一个主机关闭,甚至已被删除,我仍然可以连接到整个集群,然后代码/配置将被更新,以反映更改我的主机 IP 地址。
在 RethinkDB 中,您通过连接到集群中的节点来连接到集群。该节点将负责与集群中的所有其他节点进行通信。如果该节点与集群断开连接,那么您可能无法进行写入或读取,具体取决于您的集群分片和复制。如果该节点发生故障,您将无法执行任何操作。此时,您可以尝试连接到另一个节点。
据我了解,RethinkDB没有这样的逻辑,需要自己实现
是的,如果您的节点出现故障,RethinkDB 不会自动将您重新连接到集群中的另一个节点。话虽如此,这可能就像拥有多个连接并在它们之间切换一样简单(除非我错过了什么!)。
创建数据库时,它是为整个集群创建的“某种”,没有办法也不需要指定负责处理它的确切服务器。
是的,当您创建数据库时,它是为整个集群创建的。数据库并不真正“存在”在特定节点中。只有表存在于特定节点中。
当创建表并且我没有指定主副本标签时,哪个服务器将是主副本?
RethinkDB 会自动处理这个问题。它将根据以下内容选择主副本所在的服务器:
- 服务器分布负载(哪些服务器有更多的表和数据)。
- 特定服务器是否已经是该表的主要/次要服务器。
如果要手动控制primary或secondary在哪个服务器结束,可以通过数据库table_config
中的表手动设置rethinkdb
。(你在那个数据库上达到了顶峰。它让你更好地了解 RethinkDB 的工作原理!)
如果我指定一个分配给多个服务器的标签 - 同样的问题适用。
和上面一样。
如何选择将成为主要副本的最终服务器?
和上面一样。
在文档方面,我建议如下:
分片和复制:http ://rethinkdb.com/docs/sharding-and-replication/ (虽然你的问题表明你可能已经读过这个:))