![SSSSLIDE](https://cdn-ak-scissors.b.st-hatena.com/image/square/161b2de6d8eceb6b26a9ffb1969f7844e5fdab0a/height=288;version=1;width=512/https%3A%2F%2Fsssslide.com%2Fogp.png)
Ruby と MessagePack-RPC があれば、簡単なkey-valueストレージは簡単に作れます。54行で書けます(レプリケーションと負荷分散機能付き。サーバー38行、クライアント16行)。 簡単なKVSをベースにして、ログ集計や遠隔デプロイ、遠隔管理機能などの機能を追加していけば、ちょっと便利なサーバープログラムをサクサク自作できるハズ。 この分散KVSは、(keyのハッシュ値 % サーバーの台数)番目のサーバーにkeyを保存します。また、サーバーの名前順でソートしたときの「次のサーバー」と「次の次のサーバー」にデータをレプリケーションします。 すべてのサーバーで同じ設定ファイルを使います。サーバーごとの設定は引数を自分のホスト名に書き換えるだけなので、デプロイが容易です。 MessagePack-RPC for Ruby を使うと、分散しないkey-valueストレージ*1は
ROMA(Rakuten On-Memory Architecture)は、楽天が開発したキー・バリュー型データストア(key-valueストア)です。2009年夏から、楽天が「楽天トラベル」の閲覧履歴機能「最近見た宿」を対象にROMAを導入しています。さらに2009年10月には、ROMAをオープンソースソフトとして公開しました(写真1)。 ROMAのノード間は“ピア・ツー・ピア型” でデータをやり取りすることで処理を効率化しています。アプリケーションは初期化時にkey-valueストアを構成するノードを複数指定します。指定するノードは特別なノードである必要はなく、key-valueストアに参加しているノードであればどれでも構いません。複数指定していれば、その中の1つは生きているだろうという判断です。 アプリケーションは指定されたノードに順番にアクセスし、最初に応答したノードに自分がこれか
下記のようなシステムでパフォーマンスが良さげな SQLite を使用予定ですが、もっと速いものが無いか確認のため他のデータベースのパフォーマンスを計測してみました。SQL 利用前提ですが、NoSQL が圧倒的な性能を出す場合は検討する必要があるので KVS も確認しました。 データ件数は 1 億件程度、JDBC SQL 利用可能 INSERT、UPDATE はバッチ SELECT は主キーアクセス性能を重視 将来スケールアウトのための分散はありえるが、スタンドアロンで遅いのはだめ データベースのパフォーマンス比較 計測したデータベース データベース名 タイプ 形態 評判 計測についての備考 SQLite RDB 組み込み ※2 おもちゃ、Android標準 JDBC操作 ※1 H2 RDB 組み込み ※2 組み込み最速 JDBC操作 ※1 Derby RDB 組み込み ※2 Java標準で
[AWS][KVS] Amazon DynamoDBが思ったほど低レイテンシではなかった件 DynamoDBを使ってみた。 これまで、私はTokyo Cabinet、memcacehd、 Redisといった、わりと単純なデータモデルのKey-Value Storeを使ってきた。 そんな私が、DynamoDBを使ってだいぶ違うということを感じたので記事にしたい。 それはRemote APIのレイテンシが小さいか大きいかで全く適用範囲が違う別モノだということだ。 分散Key-Value Storeといってもいろんなタイプがある Key-Value Storeというくくりが広すぎるということもある。(NoSQLという呼び名も同じ) とにかく、分散ハッシュテーブルの原理を使ってスケールアウト可能なやつは全てKey-Value Storeと呼ばれているので注意が必要。 大きく分けると「ドキュメントデ
# Create a new session and store it as a JSON document > JSON.SET session:12345 . ‘{“user_id”: 1001, “login_time”: “2024-02-27T10:00:00Z”, “data”: {“last_page_visited”: “/home”, “preferences”: {“theme”: “dark”}}}’ “OK” # Fetch the entire session > JSON.GET session:12345 “{\”user_id\”:1001,\”login_time\”:\”2024-02-27T10:00:00Z\”,\”data\”:{\”last_page_visited\”:\”/home\”,\”preferences\”:{\”theme\”:\
Key-Value Store の Redis について、公式サイトの README を参考に概要をつかむためのメモ(ほぼ、簡易な訳のみ)。 redis - Project Hosting on Google Code README に入る前に、プロジェクトサイトのトップページに書かれている特徴から、いくつか抜粋。 Posix システム向けに ANCI-C で書かれている 対応言語 Ruby (+) Rack::Session と Rack::Cache を Redis に対応させたものもある (+) DataMapper の Redis 用アダプタがある Python Twisted Python PHP Erlang Tcl Perl Lua JAVA Scala Clojure Redis はデータベース Redis はキーと値のペアからなる辞書を実装した非常にシンプルなデータベース
KVSは基本的に(Pythonで言うところの)辞書をファイルに読み書き(永続化)する仕組みなので、 pythonが標準で持っているpickleというモジュールでも実現できるはずです。 しかし、pickleはpython専用ということもあり、一長一短のようです。 長所はやはり、pythonネイティブなので、Pythonクラスやリストといった辞書以外のものも 永続化できること。 短所はやはり、一般性に欠けるというところでしょう。 なので、専用のライブラリを使用するほうが一般的なんでしょう。 今回は由緒正しきbdbを使ってみましょう。Pythonではbsddbというモジュールが標準で用意されています。 まずはpickle(高速版のcPickle)の使用例 >>> d_square={} >>> for i in xrange(1,10): ... d_square[i]=i**2 ... >>>
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く