我正在研究如何解决客户需要将特定客户的所有数据(以及该客户的数据)存储在地理位置不同的数据库服务器上的情况.
例如,除了与客户ID 92相关的所有数据外,所有数据都应存储在主云上的数据库服务器中,客户ID 92应存储在另一个位置的不同云上的服务器中.
我正在使用的一些限制使得这有点棘手,但到目前为止,MySQL Cluster似乎是最好的方法.
但是,我不清楚它在执行查询时如何选择数据节点.例如,如果我要提交一个不需要客户ID 92的任何数据的查询,它是否仍会ping另一个云中的数据节点并引入延迟?
MySQL Cluster如何确定在SELECT查询期间要搜索哪些数据节点?有没有办法可以在查询中暗示可以忽略某些数据节点?
小智 5
哎哟......这不是MySQL Cluster的工作原理.
默认情况下,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英里.