Kyoto Tycoonのご紹介 FAL Labs info@fallabs.com.

Slides:



Advertisements
Similar presentations
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
Advertisements

なぜ今Pythonか? Pythonをお薦めする18の理由
安全なログオン手順 2004/08/26 Port139 伊原 秀明.
DB(データベース)のおはなし 作成者:小野正広 DBと言っても、  ドラゴンボール ではないですぞ! 3/1/2017.
SQL Server Always On Technologies の概要
The Perl Conference Japan ’98 朝日奈アンテナによる コンテンツ情報の取得と利用
株式会社ECナビ システム本部 ECナビラボグループ 春山 征吾
ヘルスケア連動型 市販薬検索システム 研究者 : 加納 えり 指導教員 : 越田 高志.
Webアプリケーション開発の 基本的なポイント
第3回参考文献発表 PHP言語 岩永逸平.
情報理工学部 情報システム工学科 3年 H 井奈波 和也
ハルビン絵葉書コレクションシステムの再構築と機能追加 -サーバ側:PHPとMySQLを用いて
SOHOシステムの構築と運用 東北NTユーザ会新潟勉強会資料.
JPAを利用した RESTful Webサービスの開発
2006年11月15日 植田龍男 Webサービス II (第8回) 年11月15日 植田龍男.
第2章 ネットサービスとその仕組み(前編) [近代科学社刊]
UNIX Life KMSF M2 saburo.
IDLTM/IONTMを使用した UDON (Universe via Darts ON-line) プロトタイプの作成
REST型Webサービスによる 楽曲検索システムの開発
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
分散コンピューティング環境上の Webリンク収集システムの実装
Hot Pepper for iPod touch
ケータイキット for Smarty のご紹介
表紙.
第4回 個人の動画配信補足のためのWeb構築
IAA情報登録クライアント for Windows
「まめだくん Ver.1.0」 特徴と利用方法.
オペレーティングシステムⅡ 第3回 講師 松本 章代 VirtuaWin・・・仮想デスクトップソフト 2009/10/16.
佐賀大学 理工学部知能情報システム学科 講師 大月 美佳
平成19年11月8日 図書系職員のための アプリケーション開発講習会
インターネット上の応用サービスの中継・変換・統合技術
Perlを用いた 学内専用アップローダの作成
WebサービスII (第8回) 2007年11月14日 植田龍男.
Webコミュニケーショングループ ~CGI勉強会~ (データーベース編)
ビューとコントローラ.
HTTPプロトコルとJSP (1) データベース論 第3回.
押さえておきたいIE8の セキュリティ新機能
HTTPプロトコル J2EE I 第7回 /
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
データベース設計 第9回 Webインタフェースの作成(1)
第8章 Web技術とセキュリティ   岡本 好未.
ホスティングサーバの作成と、 ラズベリーパイの利用
11.Webサイトとデータベース, Webサイト+ブログシステムの開設手順例
2017年度 情報技術マップ調査 ITディレクトリの構成とSI要素技術
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
第1回.リレーショナルデータベースを使ってみよう
Riakデータベース on SoftLayer
Webサービス II(第3回) 2007年10月10日.
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
表紙.
実行時情報に基づく OSカーネルのコンフィグ最小化
第7回JavaScriptゼミ セクション4-5 発表者 直江 宗紀.
Webセキュリティ 情報工学専攻 1年 赤木里騎 P226~241.
Internet広域分散協調サーチロボット の研究開発
Web - 01 IIS を インストールしよう.
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
Javaによる Electronic Commerce Systemの開発(2)
アプリケーション依存の先読みが可能なO/Rマッピングツール
情報システム1及び演習 第一回 データベースの概要.
一歩進んだ Views の使い方 スタジオ・ウミ 山中.
SQL Server ベースの SAP システム における高可用性ソリューション
Z39.50プロトコルによる日本語書誌データ情報検索システム
平成30年度 情報技術マップ調査 ITディレクトリの構成とSI要素技術
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
第2回 Webサーバ.
オペレーティングシステム 作成 T21R003 荏原 寛太.
アプリケーションゲートウェイ実験 2001.10.5 鬼塚 優.
HTTPプロトコルの詳細 M1 峯 肇史.
Presentation transcript:

Kyoto Tycoonのご紹介 FAL Labs info@fallabs.com

概要 軽量データベースサーバ RDBMSのような関係演算やSQLをサポートし ない代わりに、パフォーマンスとスケーラビリ ティを向上 毎秒数万クエリでも安定動作 いわゆるKey-Value Storeの一種 各種KVSは大規模Webサービスでの需要で発達 memcached (LiveJournal), Cassandra (facebook) Dynamo (Amazon), BigTable (Google), hBase (Yahoo) UNIX DBMのネットワーク化 軽量DBライブラリKyoto Cabinetを内蔵 Tokyo CabinetとTokyo Tyrantの再実装 mixi、GREE、NetVibes等で採用実績

機能 永続化キャッシュサーバ キャッシューサーバmemcachedの代替 オンメモリで高速に動作。メモリ使用量は 60%に削減 各レコードが指定時刻で自動削除 クライアントライブラリ主導の分散処理 永続化と高可用性 オンメモリDBだけでなく、ファイルDBが選 択可能 再起動時にもデータが消えない ホットバックアップ、更新ログ、レプリケー ション 複数サーバでデータを冗長化して迅速かつ 確実に障害対応 付加機能 トランザクションとカーソル 複数操作の一括適用や、レコードの順序操作 が可能 スクリプト言語拡張 Lua言語を内蔵し、任意の処理をサーバ側で 実行可能

インターフェイス プロトコル HTTPを採用し、どの言語とも連携可能 RPC方式とRESTful方式をサポート keep-alive接続により高速化 一部コマンドはバイナリプロトコルもサポート プラガブルサーバにより任意のプロトコルも実 装可能 API = プロトコルの隠蔽 C++言語用のAPIは標準添付 コマンドラインツールも標準添付 他言語対応は有志に委任 Perl版、PHP版、Ruby版、node.js版が存在 それ以外の言語では標準HTTPクライアントを 利用 RESTful方式を用いればライブラリ開発は容 易 memcachedモジュールも利用可能

HTTPの例 RPC方式でレコードを格納 RPC方式でレコードを検索 RESTful方式でレコードを格納 RESTful方式でレコードを検索 POST /rpc/set HTTP/1.1 Content-Length: 22 Content-Type: text/tab-separated-values key japan value tokyo HTTP/1.1 200 OK Content-Length: 0 RPC方式でレコードを検索 POST /rpc/get HTTP/1.1 Content-Length: 10 Content-Type: text/tab-separated-values key japan HTTP/1.1 200 OK Content-Length: 12 value tokyo RESTful方式でレコードを格納 PUT /japan HTTP/1.1 Content-Length: 5 Content-Type: application/octet-stream tokyo HTTP/1.1 201 Created Content-Length: 0 RESTful方式でレコードを検索 GET /japan HTTP/1.1 HTTP/1.1 200 OK Content-Length: 5 Content-Type: application/octet-stream tokyo

クライアント実装例 import time import urllib import http.client class KyotoTycoon: def open(self, host = "127.0.0.1", port = 1978): self.ua = http.client.HTTPConnection(host, port) def close(self): self.ua.close() def set(self, key, value, xt = None): if isinstance(key, str): key = key.encode("UTF-8") if isinstance(value, str): value = value.encode("UTF-8") key = "/" + urllib.parse.quote(key) headers = {} if xt != None: xt = int(time.time()) + xt headers["X-Kt-Xt"] = str(xt) self.ua.request("PUT", key, value, headers) res = self.ua.getresponse() body = res.read() return res.status == 201 def remove(self, key): self.ua.request("DELETE", key) return res.status == 204 def get(self, key): self.ua.request("GET", key) if res.status != 200: return None return body kt = KyotoTycoon() kt.open("localhost", 1978) kt.set("japan", "tokyo", 60) print(kt.get("japan")) kt.remove("japan") kt.close() require 'uri' require 'net/http' class KyotoTycoon def open(host = "127.0.0.1", port = 1978) @ua = Net::HTTP::new(host, port) @ua.start end def close @ua.finish def set(key, value, xt = nil) key = "/" + URI::encode(key) req = Net::HTTP::Put::new(key) if xt xt = Time::now.to_i + xt req.add_field("X-Kt-Xt", xt) res = @ua.request(req, value) res.code.to_i == 201 def remove(key) req = Net::HTTP::Delete::new(key) res = @ua.request(req) res.code.to_i == 204 def get(key) req = Net::HTTP::Get::new(key) return nil if res.code.to_i != 200 res.body kt = KyotoTycoon::new kt.open("localhost", 1978) kt.set("japan", "tokyo", 60) printf("%s\n", kt.get("japan")) kt.remove("japan") kt.close

レプリケーションの構成例 マスタサーバ (アクティブ) マスタサーバ (スタンバイ) データベース データベース クライアント 更新ログ ロードバランス 双方向レプリケーション (デュアルマスタ) スレーブサーバ スレーブサーバ スレーブサーバ スレーブサーバ データベース データベース データベース データベース 一方向レプリケーション (マスタ・スレーブ)

参考資料 公式サイト Kyoto Cabinet http://fallabs.com/kyotocabinet/ Kyoto Tycoon http://fallabs.com/kyototycoon/ クライアントライブラリ Perl版: http://search.cpan.org/~tokuhirom/Cache- KyotoTycoon-0.09/ PHP版: http://openpear.org/package/Net_KyotoTycoon Ruby版: https://github.com/uu59/kyototycoon-ruby node.js版: https://github.com/swdyh/node-kyoto- tycoon ブログ記事 memcachedとの比較 http://fallabs.com/mikio/tech/promenade.cgi?id=1 07 レプリケーション設定方法 http://fallabs.com/mikio/tech/promenade.cgi?id=1 08 バイナリプロトコルの詳細 http://fallabs.com/mikio/tech/promenade.cgi?id=1 10