1

たくさんのテキストを含むMySQLDBを持っています。ウェブサイトからデータを取得し、それをテーブルに挿入しています。

DBにSSDHD(100GB)を使用していますが、スペースが足りません。テーブル構造の何かが大きすぎたと思います。すべての列のサイズを予測できないため、使用しています。ほとんどのフィールドのvarchar\text\mediumテキスト。すべてのデータをDBに挿入すると、エラーが監視され、特定のフィールドが挿入しようとしているデータに対して小さすぎることがわかった場合、フィールドのサイズを大きくしています(たとえば、varchar(1000)からvarchar(2000))。

今までは約180万行ありましたが、何かおかしいと思います。

これが私のテーブルの構造です-

CREATE TABLE `PT` (
  `patID` int(11) NOT NULL,
  `Title` varchar(450) DEFAULT NULL,
  `IssueDate` date DEFAULT NULL,
  `NoFullText` tinyint(1) DEFAULT NULL,
  `Abstract` text,
  `ForeignReferences` varchar(15000) DEFAULT NULL,
  `CurrentUSClass` varchar(2200) DEFAULT NULL,
  `OtherReferences` mediumtext,
  `ForeignPrio` varchar(900) DEFAULT NULL,
  `CurrentIntlClass` varchar(3000) DEFAULT NULL,
  `AppNum` varchar(45) DEFAULT NULL,
  `AppDate` date DEFAULT NULL,
  `Assignee` varchar(300) DEFAULT NULL,
  `Inventors` varchar(1500) DEFAULT NULL,
  `RelatedUSAppData` text,
  `PrimaryExaminer` varchar(100) DEFAULT NULL,
  `AssistantExaminer` varchar(100) DEFAULT NULL,
  `AttorneyOrAgent` varchar(300) DEFAULT NULL,
  `ReferencedBy` text,
  `AssigneeName` varchar(150) DEFAULT NULL,
  `AssigneeState` varchar(80) DEFAULT NULL,
  `AssigneeCity` varchar(150) DEFAULT NULL,
  `InventorsName` varchar(800) DEFAULT NULL,
  `InventorsState` varchar(300) DEFAULT NULL,
  `InventorsCity` varchar(800) DEFAULT NULL,
  `Claims` mediumtext,
  `Description` mediumtext,
  `InsertionTime` datetime NOT NULL,
  `LastUpdatedOn` datetime NOT NULL,
  PRIMARY KEY (`patID`),
  UNIQUE KEY `patID_UNIQUE` (`patID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

私は何をすべきか?データの約20%があります(つまり、350GB〜のスペースが必要になります)。ここでのパフォーマンスへの影響は何ですか?テーブルを複数のHDで複数のテーブルに分割する必要がありますか?最後に、スフィンクスを使用してデータのインデックス作成とクエリを行います。

4

1 に答える 1

1

非TEXT列の値はすべて、1つの8KBレコード(HDDの分割されていない単位)に保存されます。TEXT列の値は、データの外部ブロックへのポインターとして格納されます。

これらの種類の構造(非常にテキスト指向)は、MongoDBなどのNOSQL(SQLだけでなく)データベースによってより適切に処理されます。

しかし、大量のテキストを保存しないようにするために、データの処理と構造化の方法に関してできることはたくさんあると思います。

繰り返しの情報を避け、簡単な更新(1か所で更新-どこにでも表示)を可能にするためにデータベースを構造化するプロセスは、正規化と呼ばれます。

これらの大きなVARCHAR(例:発明者の長さ1500)に保存しているデータがデータの複数の要素(例:コマで区切られた発明者の名前)として構造化されている場合は、発明者テーブルを作成してDBテーブルを再構築できます。そしてそれを参照します。

于 2012-07-12T09:03:07.353 に答える