用于存储大量行的数据模式

时间:2016-10-30 12:13:44

标签: mongodb database-design database nosql

我正在处理具有以下域名结构的项目:

  1. 用户。可能有多个用户。
  2. 项目。每个用户都可以创建多个项目。
  3. 关键字。每个项目可能包含大量关键字,最多可包含200,000个关键字。它的字符串最多为300个字符。
  4. 如果至少有1000个用户,每个用户可以有10个项目,因此将存储1000 * 10 * 200,200个关键字。

    用例:

    1. 用户一次上传200,000个关键字。插入应该非常快。
    2. 用户根据搜索查询一次删除大量关键字
    3. 用户更新(重命名)一个关键字或少数关键字
    4. 用户使用通配符搜索%%搜索关键字。如果数据库不支持,可以在Java内存中进行搜索。
    5. 可能的方法:

      1. 在projectId上具有适当索引的单个SQL表。我相信即使使用索引,它也会非常缓慢和沮丧。
      2. 例如,基于userId的SQL表和分区。在这种情况下,不清楚散列函数应该是什么样子。
      3. 将整个集合序列化为blob并将其存储在Projects表的列中。甚至更新单行将导致整个集合的序列化。
      4. 使用MongoDb(其他NoSql数据库),使用适当的索引存储所有集合中的所有数据。它会比单个SQL表更快吗?不确定
      5. 使用NoSql,为每个创建的项目动态创建新集合。 MongoDb每个数据库限制了大约24000个命名空间。
      6. 存储此类数据的首选数据库和表结构是什么?我认为最好的解决方案是5.

1 个答案:

答案 0 :(得分:1)

试试solr或lucene搜索引擎。你的问题似乎更多的是搜索。我有相同的场景,我已经使用Java中的solr实现了它。