mysql - MySQL Cluster 如何确定搜索哪些数据节点来进行 SELECT 查询?

标签 mysql sharding

我正在研究如何解决客户需要将特定客户的所有数据(并且仅该客户的数据)存储在地理位置不同的数据库服务器上的情况。

例如,所有数据都应存储在主云的数据库服务器中,但与客户 ID 92 相关的所有数据除外,这些数据应存储在另一个位置的不同云的服务器中。

我正在处理一些限制,这让这有点棘手,但到目前为止,MySQL Cluster似乎是最好的方法。

但是,我不清楚它在执行查询时如何选择数据节点。例如,如果我要提交一个不需要客户 ID 92 的任何数据的查询,它是否仍会 ping 另一个云中的数据节点并引入延迟?

MySQL Cluster 如何确定在 SELECT 查询期间搜索哪些数据节点?有什么方法可以在查询中提示某些数据节点可以忽略吗?

最佳答案

哎哟.. MySQL 集群不是这样工作的。

默认情况下,MySQL Cluster 在 PRIMARY KEY 上对数据进行分区。但是,可以在 PRIMARY KEY 的一部分上使用用户定义的分区和分区。这对于将相关数据分组在一起并确保数据在一个分区内的位置非常有用。由于相关数据随后保存在一个分区中,因此可以在不牺牲性能的情况下从 2 个数据节点扩展到 48 个数据节点——它将保持不变。 查看更多详情 http://dev.mysql.com/doc/refman/5.5/en/partitioning-key.html

默认情况下,API 会在 PRIMARY KEY(或使用的主键的已定义部分)上计算哈希值(使用 LH3* 算法,该算法使用 md5)以确定向哪个分区发送查询。计算的散列为 128 位,64 位确定分区,64 位确定分区上散列索引中的位置。作为用户,您无法准确了解哪个节点拥有数据(或谁将存储数据),但实际上这并不重要。

关于关于跨 2 个云分布一个 MySQL 集群和分区数据的原始问题。数据节点之间需要可靠的低延迟访问,因此您不希望将节点分散开来,除非它们彼此相距不到 50-100 英里。

关于mysql - MySQL Cluster 如何确定搜索哪些数据节点来进行 SELECT 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17254579/

相关文章:

sql - SELECT 选择都查看过页面的用户

python - 分片 Django 项目

mysql - 数据库分片与分区

mysql - 获取 SQL 中 DISTINCT 值的总和并将其显示在记录中

java - 使用 Hibernate 表示表关系是个好主意吗?

mongodb 使用字符串字段进行范围分片

dapper - 如何将 Dapper 与 Elastic Sc​​ale MultiShardConnection 和 MultiShardDataReader 结合使用?

mysql - 自动分片 MySQL?

javascript - Express js 中的一次性密码生成

python - 如何读取QComboBox数据并将其存入mysql数据库