A1: riak-js не использует никаких скрытых настроек, вам решать, как настроить узлы Riak.
A2: Ваш сценарий выглядит нормально, вы ничего не делаете неправильно.
Правда в том, что я еще не начал бенчмаркинг или всерьез рассматривал проблемы с производительностью.
Тем не менее, каждый запрос помещается в очередь внутри и отправляется последовательно. Это упрощает API, и вы не сталкиваетесь с условиями гонки, но у него есть свои ограничения. В идеале я хочу создать оболочку вокруг riak-js, которая позаботится о:
- Удерживание нескольких экземпляров для параллельного выполнения запросов
- Автоматическое переподключение к другим узлам в кластере при выходе из строя
Ваш пример выполняется за ~ 5 секунд на моем MBP (с использованием Bitcask).
=> time coffee test.coffee
real 0m5.181s
user 0m1.245s
sys 0m0.369s
В качестве доказательства концепции взгляните на это:
dbs = [require('riak-js').getClient({debug: false}), require('riak-js').getClient({debug: false})]
N = 1000
for i in [1..N]
db = dbs[i % 2]
db.save('sq', String(i), String(i*i))
for i in [1..N]
db = dbs[i % 2]
db.get('sq', String(i))
Результаты:
=> time coffee test.coffee
real 0m3.341s
user 0m1.133s
sys 0m0.319s
Это улучшится за счет использования большего количества клиентов, обращающихся к БД.
В противном случае ответ - интерфейс Protocol Buffers, без сомнения об этом. Я не смог запустить его на вашем примере, поэтому мне придется копаться в этом. Но это должно быть молниеносно.
Убедитесь, что вы используете последнюю версию Riak (было много улучшений производительности). Также учтите небольшие накладные расходы на компиляцию CoffeeScript.