Выбор лучшей базы данных для полностью динамичной мультитенантной системы - PullRequest
0 голосов
/ 10 февраля 2019

Итак, я создаю мультитенантный SaaS-проект, очень близкий к Zoho Creator .

Основная функция этого проекта - поиск и вставка данных для каждогоклиент для создания своих собственных приложений.

Из-за характера проекта нам нужна какая-то база данных, которая может обрабатывать поиск / фильтрацию по каждому неизвестному полю w и эффективно сортировать результаты по другому.

Я уже тестировал MongoDB и Elasticsearch.

MongoDB) Первая проблема с MongoDB заключалась в том, что мы должны знать, какие поля будут искать, поэтому мы можем добавить индекс.но позже я придумал такую ​​структуру:

[
  {
    record_id: 1,
    module_id: 1,
    data: [
      { k: 'title', v: 'This is a test' },
      { k: 'body', v: 'Our content goes here' },
      { k: 'created_at', v: '2019-02-10' }
    ]
  }, ...
]

И я добавил индекс данных, хотя он выглядит неплохо, но производительность не была достаточно хорошей для меня, и мы не смогли быстро отсортировать результат (возможно, яя делаю что-то не так).

Elasticsearch) Из-за ограничения индексов и столбцов я пришел с одним индексом и предварительно определенными столбцами, такими как:

_id | tenant_id | module_id | long1 | long2 | long3 | str1 | str2 | str3

Это самый близкийвещь, которую я нахожу, но я не уверен, будет ли это соответствовать моей цели или нет.

Пользователи и запросы пользователей:

Пользовательские запросы больше похожи на: SELECT * FROM data WHERE tenant_id = 10 AND module_id = 2 AND long1 > 10 AND long2 < 300 AND str IN ('test', 'test2', 'tests3') OR long 3 BETWEEN 200 AND 1000 ORDER BY str3 DESC

Мы хотим обслуживать почти 400 запросов в секунду с помощью мощного сервера Bare Metal.Моя текущая опция - использовать MongoDB в качестве нашей ACIDic-базы данных и Elasticsearch в качестве нашей основной базы данных для «любых запросов».Есть ли лучший вариант для такого проекта?

Большое вам спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...