Mais conteúdo relacionado Cy Dn 20070912 My Sql Users Conf Japan 20071. サイボウズの
MySQL に対する取り組み
サイボウズ株式会社 開発本部
サイボウズ株式会社 開発本部
プロダクト開発部
プロダクト開発部
ガルーン開発グループ
ガルーン開発グループ
丹羽 純平
丹羽 純平
米川 健一
米川 健一 2. 目次
ガルーン 2 とは?
MySQLを使い倒したグループウェア
特徴と問題点
解決策 → 次期ガルーン
全文検索を求めて
Senna の取り込み
スケーラビリティを求めて
ガルーン 2 のスケールアウトについて
DB/テーブル分割、クエリチューニング、キャッシュ
2 3. ガルーン2とは?
サイボウズのWebグループウェア
http://garoon.cybozu.co.jp/
300人以上の中規模でもOK
つなガル、ひろガル、おてガル
管理者もユーザもみんなが使いやすいグループウェア
弊社のグループウェアは 7回連続顧客満足度1位
MySQLを使い倒したグループウェア
3 5. ポータル画面
各アプリケーションをアイコンで分かりやすく説明。
ワンクリックで目的の情報の場所に移動できます。
全社・所属部署・個人と目的や組織別
に自由にポータルを作成できます。
当日、今週のスケジュールや
天気がひと目でわかります。
グラフポートレットを使って
簡単にグラフ化。数字を
視覚的に表示できます。
≪企業ポータル画面≫
自分に関係があるすべての情報の新着や更新がトップペー
≪個人ポータル画面≫ ジに集ります。好みにあわせて、情報の表示位置を変え、仕
事のしやすい環境を作れます。
5 6. スケジュール機能
見たい予定の期間を選択できます。 予定はクリック操作だけ
で時間、メンバー、会議
室まですべて登録できま
す。
所属部署のメンバや他部署
の社員の予定、会議室や備
品の予約まで一覧で把握で
予約登録時にメンバーや
きます。
会議室の空き時間を確認
して、予定を調整できます。
6 9. 次期ガルーン
検索機能を求めて
スケーラビリティを求めて
・DB分割 ・Sennaの取り込み
・ユーザ単位でテーブル分割 ・MySQL+Senna
→ Tritonnを利用
・キャッシュを活用(memcached)
9 11. 全文検索エンジン
FAST
インターネット
Google Search Appliance
イントラネット
Hit!
Lucene, HyperEstraier, Senna
アプリケーション
オープンソース多数
11 12. Senna
組み込み用の高速全文検索エンジン
MySQLやPostgreSQL、Ruby等に対応
アプリ側から見たら、普通にMySQLを使用
(有)未来検索ブラジルにおいて開発
http://qwik.jp/senna/
LGPL
12 13. Tritonn (MySQL + Senna)
MySQLのソースにパッチ
MySQLの上位層がSennaを隠蔽
My SQL FULLTEXTのINDEX
の処理時にSennaが
SQL文解析 → 最適化 → データ検索/格納 使用される
patch
MEMORY Inno DB MyISAM
Senna
(HEAP)
.MYD .MYI
ibdata1
RAM .sen.i
引用元 : http://qwik.jp/tritonn/about.html
13 14. ガルーンの全文検索
検索機能
「横串検索」
ガルーン内の複数のアプリケーションを横断して検索
「全文検索」
ガルーン内に保存されたファイルの中身も検索
(例:WordやExcelやPowerpointやpdfファイル)
テキスト抽出フィルター
TFライブラリ(データ変換研究所)を使用
http://www.dehenken.co.jp/products/products-01/products-tf01.html
高速なアクセス権評価が必須
データとACL(アクセス制御リスト)のクローリング
14 15. 全文検索の構成
データ収集エンジン 検索エンジン
・クローラ →データとACL ・認証
・インデクサ→テキスト抽出フィルタ
・SQL実行
→クロールしたデータの追加
データの変更/削除
×
設定画面
15 16. データ収集エンジンの概観
Crawler
Data
Indexer
filter
… filter
API
Queue
ACL
MySQL
acl_id,
filter +
GRN uid list
Senna
…
Data filter Use bulk transfer
acl_id,
uid list Crawler
クロール間隔やスレッド数は
ACL
設定ファイルで変更可能
16 17. 検索エンジンの概観
Servlet
画面作成
API
…
GRN
DB
・リモートサービス対応のため検索エンジンには直接アクセスできない。
・ガルーンを通じて検索サーバにアクセス
17 18. 検索 SQL 実行
データテーブル ACL評価テーブル
title data acl_id … acl_id uid
検索
+
スコア/日付で
JOIN
マージ
掲示板
select * from tab_grn_bulletin
where (MATCH (title, data) AGAINST (‘hoge’) )
……
title data …
acl_id acl_id uid
検索
+
JOIN
社内メール
select * from tab_grn_message
where (MATCH (title, data) AGAINST (‘hoge’) )
18 19. ACL評価
PIM系
•UIDの比較
•データテーブルをユーザ毎に用意
共有系
・ACL評価テーブルにUIDが含まれているか?
・object単位でACLの評価を行うと高コスト
→カテゴリ単位、フォルダ単位
・クロールされるデータには、ACL評価テーブルのIDが含まれる
・GRANTモデルでもREVOKEモデルでもOK
19 21. まとめ
高性能全文検索機能
Tritonn(=MySQL+Senna)
お手軽、高速
プロトタイプ完成
Sennaの進化
マルチセクション機能
NGRAMの文字種分割の制御
21 24. 現行ガルーン 2 の構成
ロードバランサ
WEBサーバ WEBサーバ WEBサーバ
DBサーバ
DBサーバーに負荷が集中
24 26. スケールアウト後の構成
ロードバランサ
WEBサーバ WEBサーバ WEBサーバ
Memcached Memcached Memcached
DBサーバ DBサーバ DBサーバ
26 30. スループット
スケールアウト後
ガルーン 2.1.2
処
理
量
経過時間
30 32. マスタDB
共通テーブルへの更新
ユーザーテーブル
組織テーブル
…
レプリケーション
各アプリケーションへの
更新
スケジュールDB 社内メールDB
ユーザーテーブル
ユーザーテーブル
組織テーブル
組織テーブル
社内メールテーブル
スケジュールテーブル
… …
32 36. tab_grn_notification_notify
_id col_user ….
1 100 ….
2 200 ….
tab_grn_notification_notfy___100 tab_grn_notification_notfy___200
_id …. _id ….
1 …. 1 ….
36 39. 例) ユーザーID1~1000のユーザーをhost1に
ユーザーID1001~2000のユーザーをhost2に
tab_grn_notification_notify
_id col_user ….
1 100 ….
2 200
3 1500 ….
host2
host1
tab_grn_notification_notfy___100 tab_grn_notification_notfy___1500
tab_grn_notification_notfy___200
39 42. 今後の課題 / 展望
複数ユーザーの個人データに対する更新処理の
パフォーマンス
分割により大量に作られるテーブルへの対策
ユーザーごとの分割ではなく、1サーバーに1テーブルでよいかもしれない
MySQL5.1のパーティショニング
行ベースレプリケーション
InnoDB 以外のストレージエンジンの検討
42