2016-10-30 4 views
0

Я работаю над проектом со следующей структурой домена:Схема данных для хранения большого количества строк

  1. Пользователи. Могут быть несколько пользователей.
  2. Проекты. Каждый пользователь может создавать несколько проектов.
  3. Ключевые слова. Каждый проект может содержать много ключевых слов, до 200 000 ключевых слов. Он имеет длину до 300 символов.

Если будет не менее 1000 пользователей, у каждого может быть 10 проектов, в результате будет сохранено 1000 * 10 * 200 200 ключевых слов.

Использование футляры:

  1. Пользователь загрузить 200000 ключевых слов одновременно. Вставка должна выполняться очень быстро.
  2. Пользователя удалить много ключевых слова сразу, основанный на поиск запроса,
  3. обновления пользователя (переименовать) один или несколько ключевых слова ключевых слов
  4. поиска пользователя по ключевым словам с использованием подстановочного поиска %%. Поиск может быть выполнен в памяти Java, если база данных не поддерживает его.

Возможные подходы:

  1. одной таблицы SQL с соответствующими индексами на ProjectID. Я считаю, что это может быть очень медленным и разочаровывающим даже с индексами.
  2. SQL-таблица и разбиение на основе userId, например. В этом случае непонятно, как должна выглядеть функция хэширования.
  3. Сериализовать всю коллекцию как blob и сохранить ее в столбце таблицы Projects. Обновление даже одной строки приведет к сериализации всей коллекции.
  4. Использование MongoDb (другая база данных NoSql), хранить все данные во всей коллекции с соответствующими индексами. Будет ли это быстрее, чем одна таблица SQL? Не уверен
  5. Используйте NoSql, создавайте новую коллекцию «на лету» для каждого созданного проекта. MongoDb имеет ограничение на 24000 пространств имен на базу данных.

Какова предпочтительная структура базы данных и таблицы для хранения таких данных? Я думаю, что лучшим решением является 5.

ответ

1

Просто попробуйте поисковую систему solr или lucene. Ваша проблема, похоже, больше связана с поиском. У меня был такой же сценарий, и я реализовал его с помощью solr в Java.

+0

Согласен. Учитывая, что пользователи могут выполнять групповой поиск текста, имеет смысл использовать ElasticSearch или Apache Solr. Текстовый поиск MongoDB не оптимизирован. Чтобы ускорить работу по обновлению, я предлагаю вам вставить каждую строку как таковую: '_id, projectId, keyword'. Затем вы можете использовать '_id' вместо ключевого слова в качестве вашего запроса на обновление. –

Смежные вопросы