Redis GET проти SQL SELECT - nosql, redis

Я досить новачка до NoSQL, але мені завжди подобалася ідея. Я подивився Редісі отримали кілька запитань про кращі способи зберігання та отримання декількох hashes.

Припускаючи наступний сценарій:

Store a list of objects (redis "Hashes") and select them by their timestamp.

Щоб архівувати це в SQL, для цього знадобиться одна таблиця і два простих запиту (INSERT & SELECT).

Спроба зробити це в Redis, Я закінчив створення наступної структури:

  1. Ключ object:$id (хеш) що містить object
  2. Ключ index:timestamp:$id (відсортований набір) score дорівнює timestamp і value включає в себе id

Хоча я можу жити з додатковою роботою по обслуговуванню двох ключів замість однієї таблиці (SQL), Мені цікаво про процес вибір декількох об'єктів:

ZRANGEBYSCORE index:timestamp:$id timestampStart timestampEnd

Це повертає array всіх ідентифікаторів, створених між ними timestampStart і timestampEnd. Щоб отримати сам об'єкт, я прошу кожного:

GET object:$id
  • Це правильний спосіб зробити це?
  • У порівнянні з базою даних SQL: чи вона все ще помітно швидше або може навіть повільніше, викликана високою кількістю GETс?

Відповіді:

3 для відповіді № 1

А. ZRANGEBYSCORE витрати O(log(N) + M) де N=|items in your set| і M=|items you"re selecting|. Отже, роблячи ZRANGEBYSCORE а потім M GET операцій просто O(long(N)+M+M) = O(log(N)+M) і щонайбільше буде вдвічі повільніше. Мережа вперед і назад могла б бути серйозним уповільненням, але, оскільки кожен з ваших результатів є незалежною операцією, ви можете просто їх прокладати. Ви також можете покласти все це в сценарій Lua і просто мати одну і туди-назад, яка була б найбільш оптимальною. Я б сказав з 99% впевненістю, що це буде швидше, ніж робити те ж саме в SQL.

Крім того, якщо це дуже часто для вас операція, ви можете отримати ще більше прискорення, просто зберігаючи весь об'єкт у вашому відсортованому наборі замість просто id. Ви б мали key = object encoded as json, score = timestamp. Це врятує вас O(M) на вашу операцію з точки зору не потрібно робити GETс

Чи це хороший спосіб робити речідійсно залежить від вашого використання. Скільки потрібно швидкості, і наскільки важливі для вас інші особливості традиційної бази даних? Пам'ятайте, що Redis - це набагато більше просто структура даних, доступна клієнтам, ніж традиційна база даних, і вона повинна зберігати все в оперативній пам'яті. Щоб дізнатися, чи правильно це для вас, нам потрібна додаткова інформація.