Files
deb-python-happybase/doc/faq.rst
2013-05-21 20:48:47 +02:00

64 lines
2.7 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

==========================
Frequently asked questions
==========================
I love HappyBase! Can I donate?
===============================
Thanks, I'm glad to hear that you appreciate my work! If you feel like, please
make a small donation_ to sponsor my (spare time!) work on HappyBase. Small
gestures are really motivating for me and help me keep this project going!
.. _donation: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ZJ9U8DNN6KZ9Q
Why not use the Thrift API directly?
====================================
While the HBase Thrift API can be used directly from Python using (automatically
generated) HBase Thrift service classes, application code doing so is very
verbose, cumbersome to write, and hence error-prone. The reason for this is that
the HBase Thrift API is a flat, language-agnostic interface API closely tied to
the RPC going over the wire-level protocol. In practice, this means that
applications using Thrift directly need to deal with many imports, sockets,
transports, protocols, clients, Thrift types and mutation objects. For instance,
look at the code required to connect to HBase and store two values::
from thrift import Thrift
from thrift.transport import TSocket, TTransport
from thrift.protocol import TBinaryProtocol
from hbase import ttypes
from hbase.Hbase import Client, Mutation
sock = TSocket.TSocket('hostname', 9090)
transport = TTransport.TBufferedTransport(sock)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = Client(protocol)
transport.open()
mutations = [Mutation(column='family:qual1', value='value1'),
Mutation(column='family:qual2', value='value2')]
client.mutateRow('table-name', 'row-key', mutations)
:pep:`20` taught us that simple is better than complex, and as you can see,
Thrift is certainly complex. HappyBase hides all the Thrift cruft below a
friendly API. The resulting application code will be cleaner, more productive
to write, and more maintainable. With HappyBase, the example above can be
simplified to this::
import happybase
connection = happybase.Connection('hostname')
table = connection.table('table-name')
table.put('row-key', {'family:qual1': 'value1',
'family:qual2': 'value2'})
If you're not convinced and still think the Thrift API is not that bad, please
try to accomplish some other common tasks, e.g. retrieving rows and scanning
over a part of a table, and compare that to the HappyBase equivalents. If
you're still not convinced by then, we're sorry to inform you that HappyBase is
not the project for you, and we wish you all of luck maintaining your code or
is it just Thrift boilerplate?