プロジェクト内のすべてのエンティティにPhalcon\Mvc \ Modelを使用しています(物事を標準化するため)。今日、いくつかのエンティティとmaxmindの場所(およびブロック)の間のネイティブな関係を実装するために、mysqlデータベースにmaxmindgeoipデータベースをインポートする必要がありました。
Maxmindデータベースはデフォルトでcsvで提供されるため、mysqlでデータベースを整理する方法はすべての開発者が自分のニーズに応じて解決しなければならない質問です。Maxmindデータベースには2つのファイルが含まれています。
- GeoLiteCity-Blocks.csv(IP範囲を格納)
- GeoLiteCity-Location.csv(場所に関する情報を格納します)
ほとんどのチュートリアルでは、IP範囲を持つテーブルを格納するために次のテーブル定義を使用することをお勧めします。
CREATE TABLE IF NOT EXISTS `GeoLiteCity_Blocks` (
`startIpNum` int(10) unsigned NOT NULL,
`endIpNum` int(10) unsigned NOT NULL,
`locId` int(10) unsigned NOT NULL,
PRIMARY KEY (`startIpNum`,`endIpNum`)
) ENGINE=InnoDB;
ご覧のとおり、複合主キーがあります。Phalcon \ Mvc \ Modelでそのようなキーを使用しても大丈夫ですか?いくつかの制限があると思います(論理的には、それらは存在するはずです。たとえば、Phalcon \ Mvc \ Model :: findFirst($ key)メソッドの動作を予測することはできません)
実際、このテーブルが使用するディスクサイズは気にしません。私にとって重要なのは、パフォーマンスだけです。また、各エンティティ/テーブルの小さな側面を大量に覚えないように、すべてのモデルを標準化したままにしておきたいと思います。
だから、私の質問:複合キーでPhalcon \ Mvc \ Modelを使用しても大丈夫ですか、それともid
主キーとなる1つの追加の列を作成し、インデックスを追加startIpNum
しendIpNum
て選択を高速化する方が良いですか?