我正在开发具有以下用例的应用程序:
- 用户上传 csv 文件,这些文件需要在应用程序重启时持久化
- 需要对 csv 文件中的数据进行查询/排序等
- 用户在上传文件时指定 csv 文件中的可查询列
目前提出的解决方案是:
- 对于小文件(更常见),将数据转换为 xml 并将其存储为 LOB 或文件系统中。对于查询,将整个数据吞入内存并使用 XQuery 之类的东西
- 对于较大的文件,在数据库 (MySQL) 中创建动态表,并在可查询列上创建索引
尽管我们已经对该解决方案进行了原型设计,并且它运行得相当好,但它使我们无法支持更复杂的文件格式,例如 XML 和 JSON。解决方案还有一些更琐碎的问题,我不会讨论。
考虑到 NoSQL 数据库的无模式特性,我认为它们可以用来解决这个问题。不过,我没有使用 NoSQL 的实际经验。我的问题是:
- NoSQL 是否非常适合这个用例?
- 如果是这样,哪个 NoSQL 数据库?
- 我们如何将 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 (...);