Итак, я создаю мультитенантный 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 в качестве нашей основной базы данных для «любых запросов».Есть ли лучший вариант для такого проекта?
Большое вам спасибо.