次のユースケースを持つアプリケーションに取り組んでいます。
- ユーザーは csv ファイルをアップロードします。このファイルは、アプリケーションの再起動後も保持する必要があります
- csv ファイル内のデータは、照会/ソートする必要があります。
- ユーザーは、ファイルのアップロード時に csv ファイルでクエリ可能な列を指定します
現在提案されている解決策は次のとおりです。
- 小さなファイル (より一般的) の場合は、データを xml に変換し、LOB またはファイル システムに格納します。クエリを実行するには、データ全体をメモリに丸呑みし、XQuery などを使用します
- 大きなファイルの場合は、データベース (MySQL) に動的テーブルを作成し、クエリ可能な列にインデックスを付けます。
私たちはこのソリューションのプロトタイプを作成し、かなりうまく機能しましたが、XML や JSON などのより複雑なファイル形式をサポートできていません。解決策には、ここでは説明しない厄介な問題がいくつかあります。
NoSQL データベースのスキーマレスな性質を考えると、この問題を解決するために使用できるかもしれません。ただし、NoSQL の実務経験はありません。私の質問は次のとおりです。
- NoSQL はこのユースケースに適していますか?
- もしそうなら、どの NoSQL データベースですか?
- DBにcsvファイルをどのように保存しますか(列ヘッダーがキーを構成し、各行のデータフィールドが値を構成するキーと値のペアのコレクション?)
- 階層構造が深い可能性のある XML/JSON ファイルをどのように保存しますか?
- クエリ/インデックス作成やその他のパフォーマンスに関する考慮事項はどうですか? それはMySQLのようなものと比べてどうですか?
返信に感謝し、事前に感謝します!
csv ファイルの例:
employee_id,name,address
1234,XXXX,abcabc
001001,YYY,xyzxyz
...
DDL ステートメント:
CREATE TABLE `employees`(
`id` INT(6) NOT NULL AUTO_INCREMENT,
`employee_id` VARCHAR(12) NOT NULL,
`name` VARCHAR(255),
`address` TEXT,
PRIMARY KEY (`id`),
UNIQUE INDEX `EMPLOYEE_ID` (`employee_id`)
);
csv ファイルの各行
INSERT INTO `employees`
(`employee_id`,
`name`,
`address`)
VALUES (...);