Я пытаюсь смоделировать серию транзакций, где каждая транзакция состоит из нескольких частей / действий.Я ищу хранилище данных, которое может помочь мне хранить и выполнять запросы к нему (подробности ниже).
Я пытался представить его как серию документов JSON, чтобы проиллюстрировать вложенную природу данных,После завершения всех операций каждая транзакция выглядит следующим образом:
{
"name": "abc",
"activity": [
{
"part": "a",
"quantity": 100,
"data": [
"car",
"bike"
]
},
{
"part": "b",
"quantity": 20,
"data": [
"scooter"
]
},
{
"part": "c",
"quantity": 49,
"data": [
"train"
]
}
]
}
Несколько транзакций отображаются в виде массива:
[
{
"name": "abc",
"activity": [
{
"part": "a",
"quantity": 100,
"data": [
"car",
"bike"
]
},
{
"part": "b",
"quantity": 20,
"data": [
"scooter"
]
},
{
"part": "c",
"quantity": 49,
"data": [
"train"
]
}
]
},
{
"name": "def",
"activity": [
{
"part": "a",
"quantity": 2,
"data": [
"train"
]
},
{
"part": "b",
"quantity": 33,
"data": [
"walk",
"run"
]
},
{
"part": "d",
"quantity": 23,
"data": [
"train"
]
}
]
},
{
"name": "ghi",
"activity": [
{
"part": "b",
"quantity": 33,
"data": [
"jog",
"run"
]
},
{
"part": "d",
"quantity": 300,
"data": [
"train"
]
}
]
}
]
Я хотел бы иметь возможность отвечать на запросы, такие как:
- Найти транзакцию
names
с quantity = 33
и data has jog
в одном и том же действии - Найти сумму
quantity
по всем activities
в транзакции, которая удовлетворяетdata has train
- Показать все
data
и группы для каждой транзакции, но только из транзакций, которые имеют одно или несколько действий с part has b
Как вы можете видеть, естьнесколько запросов, которые:
- Запрос данных внутри одной транзакции
- Запрос данных между транзакциями
- Запросы включают простые прогнозы, но могут также выполнять агрегирование
Каким будет идеальный механизм хранения и запросов, который может:
- Обрабатывать модель данных, описанную выше
- Отвечать на запросы, подобные описанным выше вразумный язык, которыйSQL-иш.Я знаю, что некоторые магазины требуют, чтобы пользователи запускали Javascript map-Reduce, но это было бы последним средством
- Разрешить постепенное обновление операций внутри каждой транзакции с течением времени - то есть по одной операции за раз на транзакцию, распределенных понесколько минут или часов
- Обработка миллиардов таких транзакций, накопленных за сутки
- Миллионы новых транзакций в день и сотни запросов в час