Всем доброго дня!
Пытаюсь найти ответ на вопрос можно ли использовать tarantool как единственную базу данных принципиально как идеологию и как хранилище данных в моем конкретном случае.
1. Насколько tarantool надежен в плане persitence? Интересно услышать видение разработчиков.
Для себя я давно сделал вывод, что при малом объеме данных SQL баз в проектах проще все скопировать в память
и в ней уже гонять key/value массивы. При огромном количестве данных и пользователей снова в сервисе нужно ставить Memcache, Redis,
и, по-сути, опять выстраивать слой работы с данными в кеше.
Так почему бы сразу не спроектировать систему так, что бы в ней осталось только in-memory хранилище?
Теперь к данным. Планируется собирать запросы и геометки пользователей, затем выполнять геолокационные вычисления и возвращать рекомендации. Планируем некий набор данных:
1. Таблица пользователей - тут все понятно.
2. Таблица хранения сессии (состояний). Состояний много и по сути это реализация конечного автомата для пошагового достижения некоторого конечного состояния типа бронирования поездки из пункта A в Пункт Б. У каждого существующего пользователя есть сессия, неплохо было бы сохранять и проейденные состояния для анализа и оптимизации.
3. Треки, точки сбора. Маршруты и области в пространстве и времени среди которых надо искать пересечение. В случае нахождения стыковок сервис высылает оповещение пользователю. Треки имеют время жизни, создаются небольшой группой активных пользователей.
4. Геоданные. Вот тут самое интересное. Возникла безумная идея развернуть все геоданные в двумерный массивы типа country[x][y], в котором каждая точка содержит 4 или 8 байт информации (слои) о географических объектах. Например, абонент посылает в систему координаты своей локацию [x][y], а мы по сути одним процессорным тактом из массива извлекаем байт страны, байт региона, два байта местности.
Получается описание локации: Россия, Московская обл, Кресная Площадь. Дальше мы в обычных гео справочниках для этого района находим список достопримечательностей и выдаем нашим пользователям место встречи, скажем, "в Гуме у фонтана".
По моим прикидкам для площади земли 510 мл кв. км и 4 байта на точку, достаточно всего 2 Гбайта памяти. И это сегодня - копеешный выделенный виртуальный сервер. Но нам не нужно, с одной стороны, покрывать весь земной шар, достаточно оставить конкретную страну. С другой стороны разрешение может быть не 1 км, а 500 или 100 метров, так что объем данных примерно понятен.
Поскольку я, в целом, дилетант, то хотел бы спросить совета у разработчиков системы можно ли реализовать искомую модель данных в tarantool? Если можно, то подскажите какие типы данных использовать, посоветуйте примеры.
Я обсуждал концепцию с профессиональными программистами, они округляли глаза, начинали говорить про SQL,облачные сервисы, API, какие то сервисы, которые дают 100 запросов в день бесплатно. Я не понимаю зачем громоздить сущности друг на друга, если можно написать простую программу с быстрыми алгоритмами, которая все рассчитает из памяти.
К сожалению, пока, в отличие от Redis информации об Tarantool сильно меньше. Надеюсь что мой вопрос немного отвлечет разработчиков от решения рутинных задач. Заранее благодарю за ответы!