thinkphp テーブル パーティション
10 個のテーブル、つまり table_1、table_2、table_3....table_10 を事前設定しました
モデルにパーティションを設定します:
protected $partition = array(
'field' => 'id ',
' type' => 'id',
'expr' => '',
'num' => 10,
); 公式ドキュメントには、Current data で渡す必要があると記載されています。それでは、データ分析に従って実際にどのデータテーブルを操作する必要がありますか? そして、現在のデータはどのようなデータに渡されますか? 私の各実験の結果は結合クエリです!現在のテーブル名が見つかりません。
専門家の方、助けてください!それとも何か適当な方法があるのでしょうか?
ディスカッションへの返信 (解決策)
あなたのパーティション テーブル フィールドは ID です
したがって、getPartitionTableName に渡されるデータ配列には、関連付けられたキー ID を持つ要素が含まれている必要があります
しかし、彼のアルゴリズムは少し奇妙です あなたの設定によると、それは'type' => 'mod' であるべきだと思われます
$field = $data[$this->partition['field']]; switch($this->partition['type']) { case 'id': // 按照id范围分表 $step = $this->partition['expr']; $seq = floor($field / $step)+1; break;......... return $this->getTableName().'_'.$seq;
ログイン後にコピー
ログイン後にコピー
パーティションテーブルのフィールドは id です
したがって、getPartitionTableName に渡されるデータ配列には、関連付けられたキー ID を持つ要素が含まれている必要があります
しかし、彼のアルゴリズムは少し奇妙です
case 'mod': // 按照id的模数分表 $seq = ($field % $this->partition['num'])+1; break;
ログイン後にコピー
設定によると、'type' => 'mod' になるはずです
$field = $data[$this->partition['field']]; switch($this->partition['type']) { case 'id': // 按照id范围分表 $step = $this->partition['expr']; $seq = floor($field / $step)+1; break;......... return $this->getTableName().'_'.$seq;
ログイン後にコピー
ログイン後にコピー
2 番目のテーブルにどのくらいのデータが書き込まれるか見てみましょう~~~
getPartitionTableNameで取得したテーブル名ではないでしょうか?
テーブル名だとテーブルを分割しないのと同じではないでしょうか?