msgpack-rpcが地味に凄い件について 〜簡易DBを作ろう!〜

やること

Python上のmsgpack-rpcで簡単なデータ同期用DBを作る。

msgpackの超簡単な説明

JSONみたいなテキストをマシン間転送で使うのは遅いからバイナリでやろうぜ!っていう規格。BSONに良く似てる感じ。

http://msgpack.org/

msgpack-rpcはmsgpackを使って実際に転送する部分を担当している。

msgpack-rpcの実例

これ見れば一発で分かる筈。
http://d.hatena.ne.jp/yatt/20120301/1330612460

これを見てDB実装を閃いたのでやってみた。

実際の実装

最も原始的なDBとは何か。それはPythonならば組み込み型ではないか、とか考えた。

これを外からアクセスできるようにすればDBサーバだよね!msgpack使えばラクチンにできるよね!

ちなみに今回使用したのはPython3とmsgpack-rpc-python、msgpack-pythonパッケージである。

Server側

import msgpackrpc

class MsgpackDB(list):
    pass

if __name__ == "__main__":
    server = msgpackrpc.Server(MsgpackDB())
    server.listen(msgpackrpc.Address("0.0.0.0", 18798))
    server.start()

Client側

import msgpackrpc

client = msgpackrpc.Client(msgpackrpc.Address("localhost", 18798))
client.call('append', 20)
client.call('append', 10)
print(client.call('pop')) # 10
print(client.call('pop')) # 20

まとめ

callがやっかいなのでラッパーを書くのもいいし、永続化とかやりたいならメソッドをオーバライドしてごにょごにょすればいい。継承楽しー

注意点

スレッドセーフは全く考慮していないし、パフォーマンスを本気で考慮しだすともっと書くことは一杯あるだろうけど、それやるぐらいならMongoDB使えよ感あるので割愛。