У меня есть данные, говорящие мне, что событие произошло для определенных вещей.
Пример:
- Ящик № 1 находится в локации А 15 февраля 2015 г., 10:00.
- Ящик №1 был помещен в ящик №2 15 февраля 2015 г. в 10:15.
- Ящик № 2 был помещен в ящик № 3 15 февраля 2015 г., 11:00.
- Ящик № 3 находится в локации B в 2015-02-16 03:00.
- Ящик № 2 был удален из ящика № 3 16 февраля 2015 г., 04:30.
- Ящик №3 находится в локации C на 16.02.2015, 05:00.
У меня есть три основных требования:
- Я должен быть в состоянии сказать, где все мои ящики на момент запроса прямо сейчас. например Запрос в 2015-02-16 06:00 должен дать результат. Ящик №1 находится внутри ящика №2 в месте B. Ящик №3 находится в месте C и внутри него ничего нет.
Я должен иметь возможность видеть все, что произошло с конкретным ящиком. например Для коробки №1:
- Was at Location A at 2015-02-15 10:00
- Был помещен в коробку №2 15 февраля 2015 г., 10:15.
- Был внутри ящика №2, который был помещен в ящик №3 15 февраля 2015 г., 11:00.
- Был внутри ящика № 2, который находился в ящике № 3, который находился в локации B 16 февраля 2015 г., 03:00.
- Находился внутри ящика № 2, который был удален из ящика № 3 16 февраля 2015 г., 04:30.
Я должен быть в состоянии сказать, где находятся все ящики в определенное время. например 16 февраля 2015 г., 10:30, ящик №1 находился внутри ящика №2 в месте А.
Я рассматривал графовые базы данных, поскольку они справляются с этим типом отношений лучше, чем реляционная база данных (попытка выполнить рекурсивный запрос в Sql непроста). Похоже, мне понадобится узел Box, узел Location и ребра между ними для отношений «Внутри» и «В». Но я не уверен, как включить временное требование в графовую модель. Я просмотрел это, но не знаю, как заставить его работать с моими требованиями.
Также обратите внимание: это должно масштабироваться до 1-4 миллиардов ящиков, каждый из которых имеет от 1 до 5000 событий. И быть в состоянии обрабатывать тысячи событий, поступающих в секунду