我正在使用预先存在的bash文件为开源数据服务器(Zotero)设置一系列数据库,我正在运行一个我不熟悉的mysql结构:
MASTER="mysql -h localhost -P 3307 -u root -pSomePassword"
SHARD="mysql -h localhost -P 3308 -u root -pSomePassword"
ID1="mysql -h localhost -P 3309 -u root -pSomePassword"
ID2="mysql -h localhost -P 3310 -u root -pSomePassword"
WWW="mysql -h localhost -P 3311 -u root -pSomePassword"
CACHE="mysql -h localhost -P 3312 -u root -pSomePassword"
echo "CREATE DATABASE zoterotest_master" | $MASTER
echo "CREATE DATABASE zoterotest_master" | $SHARD
echo "CREATE DATABASE zoterotest1" | $SHARD
echo "CREATE DATABASE zoterotest2" | $SHARD
echo "CREATE DATABASE zoterotest_ids" | $ID1
echo "CREATE DATABASE zoterotest_ids" | $ID2
似乎有多个MySql实例用于某种Shard /集群设计但是当我看到php代码中的db配置时,我看到它连接到同一个端口......现在我很困惑。
function DBConnectAuth($db) {
if ($db == 'master') {
$host = 'localhost';
$port = 3306;
$db = 'master';
$user = 'root';
$pass = 'SomePassword';
}
else if ($db == 'shard') {
$host = false;
$port = false;
$db = false;
$user = 'root';
$pass = 'SomePassword';
}
else if ($db == 'id1') {
$host = 'localhost';
$port = 3306;
$db = 'ids';
$user = 'root';
$pass = 'SomePassword';
}
else if ($db == 'id2') {
$host = 'localhost';
$port = 3306;
$db = 'ids';
$user = 'root';
$pass = 'SomePassword';
}
else if ($db == 'www1') {
$host = 'localhost';
$port = 3306;
$db = 'www';
$user = 'root';
$pass = 'SomePassword';
}
else if ($db == 'www2') {
$host = 'localhost';
$port = 3306;
$db = 'www';
$user = 'root';
$pass = 'SomePassword';
}
else if ($db == 'cache') {
$host = 'localhost';
$port = 3306;
$db = 'cache';
$user = 'root';
$pass = 'SomePassword';
}
else {
throw new Exception("Invalid db '$db'");
}
return array('host'=>$host, 'port'=>$port, 'db'=>$db, 'user'=>$user, 'pass'=>$pass);
}
我的问题是,这看起来像典型的碎片设计吗?我如何在MySql中设置它 - 我只是在Bash中指定的端口上启动多个实例,还是我必须做一些特别的事情?
我很想将Bash文件中的所有内容指向3306,并将DB分片表更新为指向3306,但我觉得这并不容易。
答案 0 :(得分:1)
在单个服务器上进行分片几乎没有意义。通常通过在类似的服务器上创建相同的数据库来完成分片,其中包含数据的子集。分片提供的扩展超出了复制,聚类等的范围。
以一个拥有数百万用户和数十亿张照片的照片共享网站为例。这不适合单个服务器,而是将用户和照片分开。可以在某些非分片服务器/数据库上复制或访问小型辅助表。
也许我们不同意“碎片”的定义?在这种情况下,请解释一下你的意思。