msgpack-rpcが地味に凄い件について 〜簡易DBを作ろう!〜
やること
Python上のmsgpack-rpcで簡単なデータ同期用DBを作る。
msgpackの超簡単な説明
JSONみたいなテキストをマシン間転送で使うのは遅いからバイナリでやろうぜ!っていう規格。BSONに良く似てる感じ。
msgpack-rpcはmsgpackを使って実際に転送する部分を担当している。
実際の実装
最も原始的な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使えよ感あるので割愛。