�����ͷ�Ƭ

���ݿ�Ⱥ�������ڸ��ָ�����ԭ�����ģ������������������������̴��󣬲��� ��������������ͬʱ�����ĵ����ܡ�Ⱥ����ʱ����Ϸ����͹����ܣ������������ӵ����� �ֲ�ɸ��Ӽ򵥵����񣬸��ӿɿصĵ�Ԫ��

�������֧�ָ��ָ����� MySQL Ⱥ�飬һЩȺ�������һЩ�����͹���ķ��������ǿ��� ��͸����ʹ�á����֧����õ� MySQL ����ͬ������˺͹��� (Ӧ�ü�����)��

MySQL ����ͬ��֧�ֹ��˷�ʽ�ķ��������������㴴���������ݿ�ͬ�������߲������ݿ�ͬ���� ������Ҫ��Ӧ���ܹ�ӵ��ͬ���IJ��ԣ������ͨ�� node_groups �ֶ���֧��������ԣ�����ʹ��ʵ�����ʵı��������

�� 1.5.0 �汾��ʼ������ͨ���ڵ�����˺� SQL hints ����ֶ��ķ����͹��� �ڵ���������������㽫 master �� slave ������һ�����š� �����У� master_0 �� slave_0 ������һ������Ϊ Partition_A �����С������ܹ���ȫ�����һ��Ⱥ�顣 ���磬�����ʹ��һ���ڵ�Ⱥ�����ڹ�������ʹ��ʹ��Ⱥ��������Ϊһ����ַ���� ���� Shard_A_Range_0_100

Example #1 Cluster node groups

{
  "myapp": {
       "master": {
            "master_0": {
                "host": "localhost",
                "socket": "\/tmp\/mysql.sock"
            }
        },
        "slave": {
            "slave_0": {
                "host": "simulate_slave_failure",
                "port": "0"
            },
            "slave_1": {
                "host": "127.0.0.1",
                "port": 3311
            }
        },
        "filters": {
            "node_groups": {
                "Partition_A" : {
                    "master": ["master_0"],
                    "slave": ["slave_0"]
                }
            },
           "roundrobin": []
        }
    }
}

Example #2 ͨ�� SQL hints ����ֶ�����

<?php
function select($mysqli$msg$hint '') {
  
/* Note: weak test, two connections to two servers may have the same thread id */
  
$sql sprintf("SELECT CONNECTION_ID() AS _thread, '%s' AS _hint FROM DUAL"$msg);
  if (
$hint) {
    
$sql $hint $sql;
  }
  if (!(
$res $mysqli->query($sql))) {
    
printf("[%d] %s"$mysqli->errno$mysqli->error);
    return 
false;
  }
  
$row =  $res->fetch_assoc();
  
printf("%d - %s - %s\n"$row['_thread'], $row['_hint'], $sql);
  return 
true;
}

$mysqli = new mysqli("myapp""user""password""database");
if (!
$mysqli)
  
/* Of course, your error handling is nicer... */
  
die(sprintf("[%d] %s\n"mysqli_connect_errno(), mysqli_connect_error()));

/* All slaves allowed */
select($mysqli"slave_0");
select($mysqli"slave_1");

/* only servers of node group "Partition_A" allowed */
select($mysqli"slave_1""/*Partition_A*/");
select($mysqli"slave_1""/*Partition_A*/");
?>
6804 - slave_0 - SELECT CONNECTION_ID() AS _thread, 'slave1' AS _hint FROM DUAL
2442 - slave_1 - SELECT CONNECTION_ID() AS _thread, 'slave2' AS _hint FROM DUAL
6804 - slave_0 - /*Partition_A*/SELECT CONNECTION_ID() AS _thread, 'slave1' AS _hint FROM DUAL
6804 - slave_0 - /*Partition_A*/SELECT CONNECTION_ID() AS _thread, 'slave1' AS _hint FROM DUAL

Ĭ�ϵģ����ʹ���������õ� master �� slave ���в�ѯ�������������һ����ѯ��ʹ�� /*node_group*/ �� SQL hint����ô�����ֻʹ���� node_group �г��ķ��������в�ѯ���������ԣ�SELECT ��ѯ������ֻ���� /*Partition_A*/ �г��� slave_0 �н��С�