Redis: когда использовать хеши против Re JSON? - PullRequest
2 голосов
/ 26 мая 2020

Я нахожусь в точке, где я мог бы хранить ресурс в Redis как ha sh или Re JSON. Мои конкретные данные в этом случае - это временные данные объекты , состоящие из нескольких строковых и числовых c полей каждое. Пользователь вызовет процесс, который создает такую ​​структуру, как:

{
    'item_id': 'k0f8h3n5m6n1w9d0k0k1m1n4b6c8f8r7'
    'amount': 3.00042
    'timestamp': 1590440708,
    'user1_status': 'pending',
    'user_2_status': 'completed'
}

Это фактически очередь, обрабатываемая клиентом-пользователем (постановка в очередь обрабатывается отдельным потоком Redis ), в котором каждый объект останется используемым (как объект ha sh или re json) в среднем около 1 часа. В любой момент времени в очереди будут десятки тысяч этих объектов . Находясь в очереди, поля объекта (например, user1_status и user2_status) будут обновляться несколько раз.

После того, как каждый объект будет обработан, я мог либо оставить его в Redis или переместите каждый объект в базу данных холодного хранения для ведения журнала и удаления из Redis. Я не уверен, что мне следует это сделать или просто оставить.

Какой тип данных Redis (Ha sh или Re JSON) больше подходит для моей задачи? Каковы некоторые общие соображения при выборе между этими двумя типами?

Примечание: Я понимаю, что если я хочу сделать что-то вроде этого:

{
    'item_id': 'k0f8h3n5m6n1w9d0k0k1m1n4b6c8f8r7'
    'amount': 3.00042
    'timestamp': 1590440708,
    'user1_status': 'pending',
    'user_2_status': 'completed'
    'parent': {
        'item1': 1,
        'item2': [1, 2, 3, 4]
        'item3': {
            'one': 1,
            'two': 2
        }
    }
}

Re JSON, вероятно, будет правильным выбором, потому что вам нужно выровнять любой объект перед сохранением его как ha sh. Ради этого вопроса, предположим, что мне не нужно этого делать, поскольку я уже знаю об этом.

1 Ответ

5 голосов
/ 26 мая 2020

Как вы уже упоминали, плоские и вложенные объекты - одна из основных причин использования Redis JSON. Другая причина заключается в том, что вас интересуют типы JSON -specifi c, такие как числа и строки, поскольку значения Redis ha sh всегда являются строками.

Наконец, если вам нужно запрашивать объекты по определенным c, Redis JSON поддерживает JSONPath для того, что может быть удобно.

Что касается производительности: хотя Redis JSON довольно эффективен, у него есть некоторые накладные расходы по сравнению с обычными хэшами Redis из-за необходимо хранить JSON ключи и сериализацию / десериализацию.

В итоге: если ваши данные структурированы или вложены и имеют определенную схему c, вы можете эффективно использовать Redis JSON. Если это просто простые пары ключ / значение и вам не важны типы значений, подойдут простые хэши Redis.

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