Как сортировать/упорядочивать данные?

У меня уже есть опыт работы с MongoDB, CouchDB, Redis, Tokyo Cabinet и другими базами данных NoSQL. Недавно я наткнулся на Riak, и он показался мне очень интересным. Чтобы начать работу с ним, я решил написать небольшой клон Twitter, "hello world" в мире NoSQL. Чтобы получить полностью рабочий клон, необходимо упорядочить твиты в хронологическом порядке. Прочитав документацию Riak, я обнаружил, что Map-Reduce - подходящий инструмент для этой работы. В моей среде разработки он работает достаточно хорошо, но какова производительность в производстве, с сотнями параллельных запросов? Есть ли другие, возможно более быстрые, методы сортировки данных, или возможно ли хранить данные в упорядоченном виде (как Cassandra)?

Мне кажется, я нашел другое решение этой проблемы - простой связанный список. Итак, одна из возможных реализаций может заключаться в том, что каждый пользователь получает свое собственное "ведро временной шкалы", где хранятся ссылки на сами твиты-данные (твиты хранятся отдельно в ведре "твиты"). Как вы знаете, эта временная шкала должна содержать ключ с именем "first", который ссылается на последний временной объект и является начальной точкой списка. Чтобы вставить новый твит во временную шкалу, просто вставьте новый элемент в ведро временной шкалы, установите "next"-ссылку этого нового элемента на "first"-элемент, после чего сделайте новый элемент "первым".

Короче говоря: Вставьте элемент, как вы бы сделали это в связанном списке...

Как и в Twitter, персональная временная шкала содержит только 20 твитов, показанных пользователю. Чтобы получить последние 20 твитов, необходимо сделать всего 2 запроса. Чтобы ускорить процесс, первый запрос использует способность Riak ходить по ссылкам для получения 20 последних объектов, помеченных тегом "next". Наконец, второй и последний запрос использует ключи, вычисленные первым запросом, для получения самих твитов (с помощью map/reduce).

Чтобы удалить твиты пользователей, которых вы только что удалили, я бы использовал возможность вторичного индекса в Riak 1.0 для получения соответствующих объектов временной шкалы/твитов.

6
задан double-beep 1 February 2019 в 19:58
поделиться