HBase: Thrift vs Rest performance

Я знаю, что есть несколько сообщений в StackOverflow о REST и Thrift для HBase, но я хотел бы немного сфокусироваться на вопросе производительности.

Я играл со следующими библиотеками в Node.js для подключения к экземпляру HBase:

После некоторых проблем с выяснением причин, по которым я не получил ответы от шлюза Thrift, я, наконец, получил оба скрипта со следующими результатами (каждый вывод равен 1000 выполненных операций):

┌─[[email protected]]─[~/Sources/node-hbase]
└──╼ node hbase.js 
hbase-write: 99ms
hbase-write: 3412ms
hbase-write: 3854ms
hbase-write: 3924ms
hbase-write: 3808ms
hbase-write: 9035ms
hbase-read: 216ms
hbase-read: 4676ms
hbase-read: 3908ms
hbase-read: 3498ms
hbase-read: 4139ms
hbase-read: 3781ms
completed
┌─[[email protected]]─[~/Sources/node-hbase]
└──╼ node thrift.js 
hbase-write: 4ms
hbase-write: 931ms
hbase-write: 1061ms
hbase-write: 988ms
hbase-write: 839ms
hbase-write: 807ms
hbase-read: 2ms
hbase-read: 435ms
hbase-read: 562ms
hbase-read: 414ms
hbase-read: 427ms
hbase-read: 423ms
completed
┌─[[email protected]]─[~/Sources/node-hbase]
└──╼ 

Сценарии можно найти здесь: https://github.com/stelcheck/node-hbase-vs-thrift

Мой вопрос: кто-нибудь заметил большую разницу между REST и Thrift для HBase (или даже вообще для любых приложений/языков)?

Ответ 1

REST предоставляет как XML, так и JSON, так что схема присутствует в самих данных. Thrift не делает этого: это всего лишь загрузка байтов, которые затем могут быть десериализованы только для сгенерированного объекта (на основе определения IDL бережливости).

Таким образом, независимо от того, как сжаты данные, бережливость должна быть быстрее, поскольку она не имеет никакой схемы с ней, при "стоимости" зависимости от других объектов для интерпретации двоичных данных.

Ответ 2

Вы можете попробовать следующее: https://github.com/alibaba/node-hbase-client

Он подключается непосредственно к серверам областей и zookeeper.