У меня уже есть опыт работы с MongoDB, CouchDB, Redis, Tokyo Cabinet и другими базами данных NoSQL.Недавно я наткнулся на Риака, и это выглядит очень интересно для меня.Чтобы начать с этим, я решил написать небольшой клон Twitter, «привет мир» в мире NoSQL.Чтобы получить полностью работающий клон, необходимо заказать твиты в хронологическом порядке.Прочитав Riak Docs, я обнаружил, что Map-Reduce является подходящим инструментом для этой работы.В моей среде разработки это работает довольно хорошо, но как производительность в производстве с сотнями параллельных запросов?Существуют ли другие, может быть, более быстрые методы сортировки данных или есть возможность хранить данные в упорядоченном виде (например, Cassandra)?
Я думаю, что нашел другое решение этой проблемы - простой связанный список,Таким образом, одной из возможных реализаций может быть то, что каждый пользователь получает свое собственное «хранилище временной шкалы», где хранятся ссылки на сами данные твитов (твиты хранятся отдельно в корзине «твитов»).Как вы знаете, этот интервал времени должен содержать ключ с именем «first», который ссылается на последний объект timeline и является отправной точкой списка.Чтобы вставить новый твит во временную шкалу, просто вставьте новый элемент в корзину, установите ссылку «следующий» для этого нового элемента в «первый», после этого установите новый элемент в «первый».
Короче говоря: Вставьте элемент, как вы бы сделали в связанном списке ...
Как и в Twitter, личная временная шкала содержит только 20 твитов, показанных пользователю.,Чтобы получить последние 20 твитов, нужно всего 2 запроса.Чтобы ускорить процесс, в первом запросе Riak использует способность ходить по ссылкам, чтобы получить последние 20 объектов, помеченных тегом «next».Наконец, во втором и последнем запросе используются ключи, вычисленные в первом запросе, для получения самих твитов (используя map / уменьшает).
Чтобы удалить твиты пользователей, которых вы только что отписали, я бы использовалспособность вторичного индекса Riak 1.0 принимать связанные объекты / твиты времени.