単純なWebアプリケーションの場合、できるだけ早く約30(10m * 3テーブル)百万レコードを処理することが主な要件です。私はそのような量のデータで作業していないので、経験豊富な人からアドバイスを受けたいと思っています。大規模なデータセット(数千万行)
データベースはビジネスの詳細を保持します。約25の属性が単一のビジネスを記述します。名前、住所など。テーブルの構造は以下の通りです。そこ
CREATE TABLE IF NOT EXISTS `businesses` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`type` int(2) NOT NULL,
`organisation` varchar(40) NOT NULL,
`title` varchar(12) NOT NULL,
`given_name` varchar(40) NOT NULL,
`other_name` varchar(40) NOT NULL,
`family_name` varchar(40) NOT NULL,
`suffix` varchar(5) NOT NULL,
`reg_date` date NOT NULL,
`main_trade_name` varchar(150) NOT NULL,
`son_address_l1` varchar(50) NOT NULL,
`son_address_l2` varchar(50) NOT NULL,
`son_address_suburb` int(3) NOT NULL,
`son_address_state` int(2) NOT NULL,
`son_address_postcode` varchar(10) NOT NULL,
`son_address_country` int(3) NOT NULL,
`bus_address_l1` varchar(50) NOT NULL,
`bus_address_l2` varchar(50) NOT NULL,
`bus_address_suburb` int(3) NOT NULL,
`bus_address_state` int(2) NOT NULL,
`bus_address_postcode` varchar(10) NOT NULL,
`bus_address_country` int(3) NOT NULL,
`email` varchar(165) DEFAULT NULL,
`phone` varchar(12) NOT NULL,
`website` varchar(80) NOT NULL,
`employee_size` int(4) NOT NULL,
PRIMARY KEY (`id`),
KEY `type` (`type`),
KEY `phone` (`phone`),
KEY `reg_date` (`reg_date`),
KEY `son_address_state` (`son_address_state`),
KEY `bus_address_state` (`bus_address_state`),
KEY `son_address_country` (`son_address_country`),
KEY `bus_address_country` (`bus_address_country`),
FULLTEXT KEY `title` (`title`),
FULLTEXT KEY `son_address_l1` (`son_address_l1`),
FULLTEXT KEY `son_address_l2` (`son_address_l2`),
FULLTEXT KEY `bus_address_l1` (`bus_address_l1`),
FULLTEXT KEY `bus_address_l2` (`bus_address_l2`)
) ENGINE=MyISAM;
このような2つの他のテーブルであることを行って、各事業の詳細であることの理由は、(比較のため)3つのソースで提供されます。 1つのテーブルだけが書き込みを行う予定です。アプリの使用状況、
- 少数の書き込み、読み込みの負荷について
。
- 10 * 3百万のデータは、時間外に挿入されず、最初に挿入されます。
- アプリケーションには多くの要求がありません。< 1秒あたり10リクエスト。
- 初期データの読み込み後、ユーザーはこれらの詳細を更新します。あるテーブルのデータを他の2と比較し、最初のテーブルのデータを更新します。
- 主に名前、住所、電話番号、州によって多くの検索が行われます。 1回の検索で3つのテーブルがすべて検索されます。検索は高速にする必要があります。
- 私の質問は、
- あるPHP
を使用して、それを構築するための滑走ではなく、3つのテーブルを持つよりも、1台の中に3つのソースを処理するために、それは価値がありますか?
- MySQLは良い解決策を提供できますか?
- MongoDBはハードウェアリソースを少なくして同じシナリオを処理できますか?
- サンプルデータベースをテスト用にセットアップする最も良い方法は何ですか?私はAmazon RDS(大)を購入し、10000レコードを挿入し、それらが1千万レコードになるまで倍増しました。
- このテーマについての良い読書ですか?
ありがとうございます。
構造が確定していますか、それとも変更/改善できますか? – mamadrood
はい、変更できます。 –