Content-Length: 336311 | pFad | http://www.slideshare.net/crumbjp/db-tech-showcase-mongodb
DB tech showcase: 噂のMongoDBその用途は? | PPT
DB tech showcase: 噂のMongoDBその用途は?
20. MongoDBのIndex
商品名
タグ
値段
ボールペン
日用品, 筆記用具
198
包丁
日用品, 刃物, キッチン
2980
バナナ
食料品, 果物
348
ほうれん草
食料品, 野菜
98
牛乳
食料品,
148
商品・テーブル
CREATE TABLE 商品 (
id INT PRIMARY,
商品名 VARCHAR(100)
);
タグ・テーブル
CREATE TABLE タグ (
商品id INT,
タグ名 VARCHAR(100),
値段 INT,
KEY(タグ名,値段)
);
食料品で200以下の商品
商品投入
■RDBMS
INSERT INTO 商品 VALUES (1,'ボールペン');
INSERT INTO タグ VALUES (1,'日用品',198),
(1,'筆記用具',198);
苦手な処理
:
クエリー
・Index用のテーブルを
SELECT * FROM
商品 INNER JOIN タグ
ON タグ.商品id = 商品.id
別途用意しJOIN
WHERE タグ名 = '食料品'
AND 値段 <= 200;
値段が重複管理で筋が悪い。。
21. MongoDBのIndex
商品名
タグ
値段
ボールペン
日用品, 筆記用具
198
包丁
日用品, 刃物, キッチン
2980
バナナ
食料品, 果物
348
ほうれん草
食料品, 野菜
98
牛乳
食料品,
148
商品投入
db.商品.save({
'商品名' : 'ボールペン',
'タグ': ['日用品', '筆記用具'],
'値段':198 }
);
:
:
食料品で200以下の商品を取得
インデックス
■MongoDB
db.商品.ensureIndex({
'タグ':1, '値段':1
});
データ形式、Index共に
クエリー
完全にサポート!
db.商品.find({
タグ構造にもってこい!!
'タグ':'食料品',
'値段': { $lte : 200 }
});
23. MongoDBのIndex
商品名
タグ
値段
ボールペン
日用品, 筆記用具
198
包丁
日用品, 刃物, キッチン
2980
バナナ
食料品, 果物
348
ほうれん草
食料品, 野菜
98
牛乳
食料品,
148
食料品で果物の商品
■RDBMS
SQLでの表現は困難
self join する?
クエリー(2タグ限定版)
SELECT
*
FROM
タグ a
INNER JOIN
タグ b
ON
a.商品id = b.商品id
AND
a.タグ名 != b.タグ名
INNER JOIN 商品 c
ON
a.商品id = c.id
WHERE
a.タグ名 = '食料品'
AND
b.タグ名 = '果物'
GROUP BY
a.商品id;
27. MongoDBのスループット
計測条件
・3 core 3GB memory
・構文解析込み(SQL, JS)
・lo経由通信 (localhost)
int(11)
・1レコード、4kb程度 id int(11) PRI
value0
value1 int(11)
・1,000,000 レコード value2 int(11)
value3 varchar(50)
value4 varchar(50)
= 4GB
value5 varchar(50)
value6 varchar(50)
value7 varchar(255)
・11 column
value8 int(11)
value9 text
・MySQLはInnoDB
29. MongoDBのスループット
Range fetch (10,000件 x 100)
SELECT
・MySQL
: 202 sec
*
FROM
・MongoDB : 3.7 sec
mytbl
WHERE
id BETWEEN 0 AND 9999;
Range count (10,000件 x 100)
・MySQL
: 37 sec
SELECT
COUNT(*)
・MongoDB : 0.4 sec
FROM
mytbl
WHERE
id BETWEEN 0 AND 9999;
53. 簡易CAS
GET
data1 = db.myData.findOne({
_id : 'FOO'
});
PUT
db.myData.update({
_id: data1._id,
cas: data1.cas
},{
$inc : { cas : 1 },
$set { field1 : 'updated' }
});
CASの実装は簡単
・update時に常にcas値を1つ増加させる。
・update時のクエリにドキュメントのcas値を使えば
衝突した際にはcas値が合わずupdateが失敗する
-53 -
--- a PPN by Garber Painting Akron. With Image Size Reduction included! Fetched URL: http://www.slideshare.net/crumbjp/db-tech-showcase-mongodb
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy