SlideShare ist ein Scribd-Unternehmen logo
1 von 40
システム可用性を拡張するイン 
デクス戦略 
鈴木いっぺい 
MongoDB, Inc.
アジェンダ 
• インデクスとは何か? 
• インデクスの基本 
• 評価/チューニング 
• 地理空間情報機能(Geospacial) 
• テキスト検索 
• スケーリング
インデクスとは何か?
インデクスとは何か? 
料理の本から特定の料理を、そのレシピの名前 
から探そうとした時、索引からレシピを探すの 
が最も早い。
索引(インデクス)を利用
連結リスト 
1 2 3 4 5 6 7
連結リストを使ってアイテム7を探す 
1 2 3 4 5 6 7
ツリー構造からアイテム7を探す 
1 
2 
3 
4 
7 
6 
5
MongoDB内のインデクスはB-Treesによっ 
て構造化
Query, Insert, Delete処理
インデクスはMongoDBの性 
能チューニングにとって最も 
重要な要素
インデクスの基本
インデクスの基本 
• データベース性能を決める最大要素 
13 
– インデクスの効果はシステムデザインの初期からレビュー 
が必要 
– 冗長なインデクス設定を避ける事 
// authorのインデクス(abc順) 
>db.articles.ensureIndex( { author : 1 } ) 
– . 
// authorのインデクス(abcとは逆順) 
>db.articles.ensureIndex( { author : -1 } ) 
// 複数要素の配列のインデクス– マルチキーインデクス 
>db.articles.ensureIndex( { tags : 1 } )
サブドキュメント(Sub-document) 
インデクス 
• サブドキュメントでのインデクス 
14 
– ドット表記を使用 
{ 
‘_id’ : ObjectId(..), 
‘article_id’ : ObjectId(..), 
‘section’ : ‘schema’, 
‘date’ : ISODate(..), 
‘daily’: { ‘views’ : 45, 
‘comments’ : 150 } 
‘hours’ : { 
0 : { ‘views’ : 10 }, 
1 : { ‘views’ : 2 }, 
… 
23 : { ‘views’ : 14, 
‘comments’ : 10 } 
} 
} 
>db.interactions.ensureIndex( 
{ “daily.comments” : 1} 
} 
>db.interactions.find( 
{“daily.comments” : { $gte : 150} } , 
{ _id:0, “daily.comments” : 1 } 
)
複合(Compound)インデクス 
• 複数の要素をもつインデクス 
15 
//コンソールで表示 
> db.articles.ensureIndex( { author : 1, tags : 1 } ) 
> db.articles.find( { author : ‘Joe D’, tags : ‘MongoDB’} ) 
//さらに次も可能 
> db.articles.find( { author : ‘Joe D’ } ) 
// Author単一のインデックス指定は必要なし 
> db.articles.ensureIndex( { author : 1 } )
ソート処理の順序 
• 単一インデクスの場合はソートは単純 
16 
– B-Treeのいずれからも検索可能 
• { attribute: 1 } もしくは{ attribute: -1 } 
• 複合インデクスの場合はソート順序が重要 
– 作者(author)で検索し、日付でソートをしたい場合 
// 作者(author)は名前順、日付は新しい日付を先にソートしてインデックする 
>db.articles.ensureIndex( { ‘author’ : 1, ‘date’ -1 } )
カバード(Covered)もしくはインデクスのみ 
のクエリー 
• 参照データはインデクスから戻ってくる 
17 
– データベースファイルはアクセスしない 
– 性能の大幅な向上 
– Compoundインデクスでも使用可能 
• プロジェクション(projection)で指定 
> db.users.ensureIndex( { user : 1, password :1 } ) 
> db.user.find({ user:”joe” }, 
{ _id:0, password:1 } 
) 
参考: プロジェクションを使ってクライアントに戻すデータを減らす事も考慮せよ 
(_id=0  Object_id を参照しない)
オプション 
18 
• ユニーク度の制限(unique, dropDups) 
// authorのインデクスはユニークである必要(一つしか存在しない) 
>db.articles.ensureIndex( { ‘author’ : 1}, { unique : true } ) 
• スパース(Sparce) インデクス 
// likesのフィールドを持たないドキュメントが複数あっても良い 
>db.articles.ensureIndex( { ‘author’ : 1, ‘likes’ : 1}, { sparse: true } ) 
* 抜けているフィールドはインデクス内でnull として記録
バックグラウンドでのインデクス生成 
• インデクス生成は長時間かかる事も多い 
• この生成をバックグラウンドに指定する事により他の 
オプレーションに対する影響を最小限に 
• バックグラウンドで複数のインデクスの生成も可能 
• レプリカセットから一旦外したセカンダリーでインデク 
スを生成 
19 
// バックグラウンドでのインデクス生成 
> db.articles.ensureIndex( 
{ ‘author’ : 1, ‘date’ -1 }, 
{background : true} 
)
Explain planコマンド 
• インデクスとオペレーションの分析を行う際に使用 
20 
– どのインデクスが使用されたかを確認 
– どれくらいのドキュメント/オブジェクトがスキャンされたかを 
確認 
– コンソール経由、もしくはコードで表示 
//コンソールで結果を表示する 
> db.articles.find({author:’Joe D'}).explain()
Explain planコマンドの出力(インデクス 
無し) 
21 
{ 
"cursor" : ”BasicCursor", 
"isMultiKey" : false, 
"n" : 12, 
"nscannedObjects" : 25820, 
"nscanned" : 25820, 
… 
"indexOnly" : false, 
… 
"millis" : 27, 
… 
} 
他のタイプ: 
• BasicCursor 
• コレクション全体スキャン 
(インデクス使用せず) 
• BtreeCursor 
• GeoSearchCursor 
• Complex Plan 
• TextCursor
Explain planコマンドの出力 
22 
{ 
"cursor" : "BtreeCursor author_1_date_- 
1", 
"isMultiKey" : false, 
"n" : 12, 
"nscannedObjects" : 12, 
"nscanned" : 12, 
… 
"indexOnly" : false, 
… 
"millis" : 0, 
… 
} 
他のタイプ: 
• BasicCursor 
• コレクション全体スキャン 
• BtreeCursor 
• GeoSearchCursor 
• Complex Plan 
• TextCursor
データベースプロファイラー 
• 遅いクエリー処理の発見 
23 
– すべてを表示する事もオプション指定可能 
– デフォルトは100ms以上の処理の表示 
//プロファイラの結果をコンソールに表示, 0=オフ1=遅い処理のみ2=すべて 
> db.setProfilingLevel(1, 100) 
{ "was" : 0, "slowms" : 100, "ok" : 1 } 
//プロファイル結果の表示 
> show profile 
//もしくは次の方法でも可能 
>db.system.profile.find().pretty()
クエリーの最適化 
• 各クエリーに対して、MongoDBは定期的に有効なイ 
ンデクスをすべて使う。 
• 最適なプランを発見次第、他のインデクスの使用を 
中止 
• 選択されたプランは、一時的にキャッシュされ、他の 
タイプのクエリーにも適用される(1000回分使用され 
る) 
• MongoDB 2.6はクエリー処理に複数のインデクスの 
組み合わせ(intersection)をサポート 
24
他のインデクスタイプ 
25 
• 地理空間(Geospatial)インデクス(2次元球体) 
• テキストインデクス 
• TTLコレクション(期限付き条件) 
• シャーディング向けのハッシュインデクス
地理空間(Geo Spatial)インデクス
2次元球体 
• 地理空間上の位置情報をインデクス化 
27 
– GeoJSON オブジェクトを使用 
– 球体の上での2次元位置情報 
//GeoJSON インデクスのためのオブジェクト構造 
{ 
name: ’MongoDB Palo Alto’, 
location: { type : “Point”, 
coordinates: [ 37.449157 , -122.158574 ] } 
} 
// GeoJSONオブジェクトのインデクス化 
>db.articles.ensureIndex( { location: “2dsphere” } ) 
サポートされるGeoJSON オ 
ブジェクト: 
Point(点) 
LineString(線) 
Polygon(ポリゴン) 
MultiPoint(複数点) 
MultiLineString(複数線) 
MultiPolygon(複数ポリゴン) 
GeometryCollection (位置情 
報コレクション)
記事情報の拡張機能 
• 記事(article)が投稿さ 
28 
れた位置情報を記録す 
る 
• 位置情報はブラウザー 
から 
Articles コレクション 
>db.articles.insert({ 
'text': 'Article 
content…’, 
'date' : ISODate(...), 
'title' : ’Intro to 
MongoDB’, 
'author' : ’Joe D’, 
'tags' : ['mongodb', 
'database', 
'nosql’], 
‘location’ : { 
‘type’ : ‘Point’, 
‘coordinates’ : 
[37.449, -122.158] 
} 
}); 
//位置情報を取得するJavascript機能. 
navigator.geolocation.getCurrentPosition(); 
//GeoJSONデータ構造に変換する必要あり
例 
29 
– 指定した座標値に”近い”場所を検索する 
>db.articles.find( { 
location: { $near : 
{ $geometry : 
{ type : "Point”, coordinates : [37.449, -122.158] } }, 
$maxDistance : 5000 
} 
} )
テキスト検索
テキストインデクス 
• テキストインデクスを使用してコレクション内のド 
31 
キュメントの中にある文字列検索を行う 
• テキストインデクスは任意の文字情報、もしくは 
文字情報の配列でも可 
• テキストインデクスを利用した検索の際には、 
$text オペレータを使用
テキスト検索 
• コレクション一つに対し 
32 
て一つのテキストイン 
デクス 
• $** オペレータを使い、 
コレクション内の文字列 
をインデクス化 
• “weights”を使って文 
字列の重要度を指定 
>db.articles.ensureIndex( 
{title: ”text”, content: ”text”} 
) 
>db.articles.ensureIndex( 
{ "$**" : “text”, 
name : “MyTextIndex”} ) 
>db.articles.ensureIndex( 
{ "$**" : "text”}, 
{ weights : 
{ ”title" : 10, ”content" : 5}, 
name : ”MyTextIndex” } 
) 
オペレータ 
$text, $search, $language, 
$meta
検索 
• $text と$search オペレータを使ってクエリー処理 
• Cursorが戻ってくる 
• $meta を使って結果のスコアを求める 
33 
// Articlesコレクション内を検索 
> db.articles.find ({$text: { $search: ”MongoDB" }}) 
– . 
> db.articles.find( 
{ $text: { $search: "MongoDB" }}, 
{ score: { $meta: "textScore" }, _id:0, title:1 } ) 
{ "title" : "Intro to MongoDB", "score" : 0.75 }
スケーリング
ワーキングセットが物理メモリを超える
いつスケールすべきか? 
• 特定のリソースがマシン、もしくはレプリカ 
セット上でのボトルネックになった場合 
• RAM 
• ディスクI/O 
• ストレージ 
• コンカレンシー(Concurrency)
垂直スケール(スケールアップ)
水平スケール(スケールアウト)
シャーディング 
• ユーザがシャードキーを選択 
• シャードキーはデータレンジを定義 
• シャードキーに従ってデータはシャード毎にパ 
ティションされる
スケーラビリティ 
40 
自動シャーディング 
シャード1 シャード2 シャード3 シャードN 
水平スケール 
• キャパシティを自由に拡張 
• コモディティサーバやクラウドアーキテクチャに最適 
• 容易な運用とコストの明確化がメリット

Weitere ähnliche Inhalte

Was ist angesagt?

MongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDBMongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDB
ippei_suzuki
 

Was ist angesagt? (20)

ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
Consistent hash
Consistent hashConsistent hash
Consistent hash
 
JSON:APIについてざっくり入門
JSON:APIについてざっくり入門JSON:APIについてざっくり入門
JSON:APIについてざっくり入門
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
MongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDBMongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDB
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜
 

Andere mochten auch

MongoDB全機能解説1
MongoDB全機能解説1MongoDB全機能解説1
MongoDB全機能解説1
Takahiro Inoue
 
データに振り回されて失敗した あんなことやこんなこと ~ゲームのために必要な本当の ビジネス・アナリティクス~
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
データに振り回されて失敗した あんなことやこんなこと ~ゲームのために必要な本当の ビジネス・アナリティクス~
Daisuke Nogami
 
月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo db
Yuji Isobe
 

Andere mochten auch (10)

MongoDB全機能解説1
MongoDB全機能解説1MongoDB全機能解説1
MongoDB全機能解説1
 
MongoDB very basic (Japanese) / MongoDB基礎の基礎
MongoDB very basic (Japanese) / MongoDB基礎の基礎MongoDB very basic (Japanese) / MongoDB基礎の基礎
MongoDB very basic (Japanese) / MongoDB基礎の基礎
 
20110514 mongo dbチューニング
20110514 mongo dbチューニング20110514 mongo dbチューニング
20110514 mongo dbチューニング
 
MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
データに振り回されて失敗した あんなことやこんなこと ~ゲームのために必要な本当の ビジネス・アナリティクス~
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
データに振り回されて失敗した あんなことやこんなこと ~ゲームのために必要な本当の ビジネス・アナリティクス~
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話
 
月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo db
 
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
 

Ähnlich wie MongoDB: システム可用性を拡張するインデクス戦略

Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
moai kids
 
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
Yoshifumi Kawai
 
Spring Data in a Nutshell
Spring Data in a NutshellSpring Data in a Nutshell
Spring Data in a Nutshell
Tsuyoshi Miyake
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
 
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
de:code 2017
 

Ähnlich wie MongoDB: システム可用性を拡張するインデクス戦略 (20)

問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイド
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Search on AWS - IVS CTO Night and Day 2016 Spring
Search on AWS - IVS CTO Night and Day 2016 SpringSearch on AWS - IVS CTO Night and Day 2016 Spring
Search on AWS - IVS CTO Night and Day 2016 Spring
 
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
 
Mongodb 紹介
Mongodb 紹介Mongodb 紹介
Mongodb 紹介
 
Spring Data in a Nutshell
Spring Data in a NutshellSpring Data in a Nutshell
Spring Data in a Nutshell
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
Mongodb
MongodbMongodb
Mongodb
 
Fundamentals of Relational Database Management Systems chapter19
Fundamentals of Relational Database Management Systems chapter19Fundamentals of Relational Database Management Systems chapter19
Fundamentals of Relational Database Management Systems chapter19
 
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
 
MongoDB勉強会資料
MongoDB勉強会資料MongoDB勉強会資料
MongoDB勉強会資料
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
 
20181031 springfest spring data geode
20181031 springfest spring data geode20181031 springfest spring data geode
20181031 springfest spring data geode
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
Linux Namespace
Linux NamespaceLinux Namespace
Linux Namespace
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会
 
Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類
 

Mehr von ippei_suzuki

MongoDBご紹介:事例紹介もあり
MongoDBご紹介:事例紹介もありMongoDBご紹介:事例紹介もあり
MongoDBご紹介:事例紹介もあり
ippei_suzuki
 

Mehr von ippei_suzuki (9)

グラフデータベース:Neo4j、そしてRDBからの移行手順の紹介
グラフデータベース:Neo4j、そしてRDBからの移行手順の紹介グラフデータベース:Neo4j、そしてRDBからの移行手順の紹介
グラフデータベース:Neo4j、そしてRDBからの移行手順の紹介
 
日本語:近年のデータベース技術がもたらすビジネス収益 --Google-slides
日本語:近年のデータベース技術がもたらすビジネス収益 --Google-slides日本語:近年のデータベース技術がもたらすビジネス収益 --Google-slides
日本語:近年のデータベース技術がもたらすビジネス収益 --Google-slides
 
日本語:開発者向けのMongo dbオペレーションガイド
日本語:開発者向けのMongo dbオペレーションガイド日本語:開発者向けのMongo dbオペレーションガイド
日本語:開発者向けのMongo dbオペレーションガイド
 
日本語:Mongo dbに於けるシャーディングについて
日本語:Mongo dbに於けるシャーディングについて日本語:Mongo dbに於けるシャーディングについて
日本語:Mongo dbに於けるシャーディングについて
 
MongoDB日本語紹介資料
MongoDB日本語紹介資料MongoDB日本語紹介資料
MongoDB日本語紹介資料
 
MongoDBご紹介:事例紹介もあり
MongoDBご紹介:事例紹介もありMongoDBご紹介:事例紹介もあり
MongoDBご紹介:事例紹介もあり
 
次世代ITの時代に向けての提言:scamアーティストになれ!
次世代ITの時代に向けての提言:scamアーティストになれ!次世代ITの時代に向けての提言:scamアーティストになれ!
次世代ITの時代に向けての提言:scamアーティストになれ!
 
Cloud Computing Business Model
Cloud Computing Business ModelCloud Computing Business Model
Cloud Computing Business Model
 
Ippeis Cloud Computing Presentation(Tokyo2.0)
Ippeis Cloud Computing Presentation(Tokyo2.0)Ippeis Cloud Computing Presentation(Tokyo2.0)
Ippeis Cloud Computing Presentation(Tokyo2.0)
 

MongoDB: システム可用性を拡張するインデクス戦略

Hinweis der Redaktion

  1. Look at 7 documents
  2. Queries, inserts and deletes: O(log(n)) time
  3. MongoDB's indexes are B-Trees. Lookups (queries), inserts and deletes happen in O(log(n)) time. TODO: Add a page describing what a B-Tree is???
  4. So this is helpful, and can speed up queries by a tremendous amount
  5. unique applies a uniqueness constant on duplicate values. dropDups will force the server to create a unique index by only keeping the first document found in natural order with a value and dropping all other documents with that value. dropDups will likely result in data loss!!! Make sure you know what it does before you use it. MongoDB doesn't enforce a schema – documents are not required to have the same fields. Sparse indexes only contain entries for documents that have the indexed field. Without sparse, documents without field 'a' have a null entry in the index for that field. With sparse a unique constraint can be applied to a field not shared by all documents. Otherwise multiple 'null' values violate the unique constraint.
  6. cursor – the type of cursor used. BasicCursor means no index was used. TODO: Use a real example here instead of made up numbers… n – the number of documents that match the query nscannedObjects – the number of documents that had to be scanned nscanned – the number of items (index entries or documents) examined millis – how long the query took Ratio of n to nscanned should be as close to 1 as possible.
  7. cursor – the type of cursor used. BasicCursor means no index was used. TODO: Use a real example here instead of made up numbers… n – the number of documents that match the query nscannedObjects – the number of documents that had to be scanned nscanned – the number of items (index entries or documents) examined millis – how long the query took Ratio of n to nscanned should be as close to 1 as possible.
  8. Indexes should be contained in working set.
  9. From mainframes, to RAC Oracle servers... People solved problems by adding more resources to a single machine.
  10. Large scale operation can be combined with high performance on commodity hardware through horizontal scaling Build - Document oriented database maps perfectly to object oriented languages Scale - MongoDB presents clear path to scalability that isn't ops intensive - Provides same interface for sharded cluster as single instance