Личный блог с мыслями и наблюдениями

Riak — как универсальное решение

Riak — это документно-ориентированная база данных с поддержкой HTTP, JSON, REST.

На основе Riak можно реализовать полноценный проект с CMS, поддержкой пользователей и загрузкой файлов.

Возможности

  • Хранение объектов
  • Ссылки(связи) между объектами
  • Использование в качестве кэша
  • Map/reduce, distributed grep
  • Отказоустойчивость
  • Поиск

Особенности

Хранение данных распределенно на серверах (но при большом(50 и более) количестве узлов ребалансировка занимает много времени)

Пример использования

Предположим, вам нужно создать форму для опроса с возможностью прикрепления файлов.

На Riak это сделать быстро и просто — немного времени, HTML и Javascript.

Благодаря тому, что Riak поддерживает REST — добавление записи и загрузку файла сделать очень легко.

Например, сохраняем заполненную форму:

(<form id=”form”...) $.ajax({ url: '/riak/testbucket', type: 'POST', contentType: 'application/json; charset=utf-8', data: JSON.stringify($('#form').serializeArray()), dataType: 'json', success: function(data, textStatus, request){ path = request.getResponseHeader('Location').split('/').pop(-1); } }); 

Если не указывать ключ, по которому сохранять данные, то Riak создаст запись со случайным ключем и вернет его значение в поле Location заголовка ответа.

Сохраняем файл:

(<input type=”file” id=”fileinput”...) var files = $('#fileinput').prop('files'); if (files.length > 0) { var file = files[0]; var url = '/riak/testbucket-files/'+path; var xhr = new XMLHttpRequest(); xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', file.type); xhr.send(file); } 

Получаем список сохраненных записей (ключей):

$.ajax({ url: "/riak/testbucket?props=false&keys=true" }).done(function ( data ) { // result here data = {keys: []} }); 

В Riak можно хранить и раздавать не только картинки, но и другие файлы, например можно положить индексный HTML-файл, который будет делать запросы к данным и выводить их для пользователей, достаточно при загрузке указать

Content-Type: text/html

Таким образом, для создания полноценного портала достаточно только Riak и Nginx(для управления правами на доступ).

Тонкости

Отсутствие данных о времени создания ключа, может вызывать неудобство, но есть информация о времени последнего изменения ключа.

Так как Riak — документно-ориентированная база данных, то в ней нет схемы, это с одной стороны позволяет добиться гибкости, но в то же время, нужно следить за структурой данных.

30.07.2013   техническое   riak   код