noSql間のコントラスト

4590 ワード

redis、memcache、mongodyについて
1.性能
    ,              。
    ,TPS  redis memcache   ,   mongoDB。

2.操作の利便性
memcache       。(key-value)
redis    ,      ,redis    ,     IO  ,     list,set,hash        。
mongodb         ,  ,         ,           。

3.メモリ容量の大きさとデータ量の大きさ
redis 2.0         VM  ,         ;   key value      (  memcache)
memcahce          ,  LRU  。memcahce    magent,    10 4G memcache  ,      40G。magent -s 10.1.2.1 -s 10.1.2.2:11211 -b
10.1.2.3:14000
mongoDB          ,      VM     ,        。            。

4.可用性(単一の問題)
redis,             ;     ,                    ,     ,        ,          ;     sharding,          hash  。       ,  redis       ,         (    ),           (      ),           。
memcache          ,    ;      ,       hash       ,             。
mongodb  master-slave,replicaset(        ,      ),auto sharding  ,                。

5.信頼性(持続性)
            
redis  (  、AOF):         ,aof         ,       ;
memcache   ,       ,    ;
mongodb 1.8      binlog           ;

6.データ整合性(トランザクションサポート)
memcache      , cas     ;
redis       ,               ;
mongodb     ;

7.データ分析
mongodb          (mapreduce),     

8.シーンの適用
redis:               
memcache:               ,    ;   ,    (      ,        ,   sharding)
mongodb:               。

コントラストパラメータ
memcache
redis
mongodb
データベースのタイプ
純粋なkey-valueデータベース、データ構造は単一です
構造化データベース
オブジェクトデータベース
データ型のサポート
string
string,list,sort,sorted,hash豊富なデータ表現
リレーショナル・データベースと同様のインデックス
可用性
データ冗長メカニズムがなく、コンシステンシhashを使用して可用性を向上
ms,mss構造をサポートし,slave再接続プライマリノードは全量同期の発生をもたらし,性能と効率に影響を及ぼす.読み書き分離を実現でき、slave再接続で全量のデータを使用すると、性能と効率に問題があり、自動shardingをサポートせず、プログラム上の一貫性hashを実現する必要がある.
msをサポートして、replication setをサポートして、setは自動的に故障して変換することができて、autoshardingをサポートします
永続化のサポート
データは完全にメモリに格納され、永続化のサポートはありません.
永続化、スナップショット持続化、aof持続化をサポート
1.8バージョンはbinlog方式で持続的な信頼性をサポートし始めた
メモリ領域の最適化
最大メモリ制限、LRUアルゴリズム淘汰(オプション)
独立したvmメカニズム、最大メモリ制限、データttlの期限切れ設定、メモリ淘汰(オプション)
オペレーティングシステムのvm管理メカニズムに依存して、メモリマッピングファイルを使用して、残りのメモリをキャッシュとして使用して、最大のメモリ制限がなくて、データはファイルシステム上とメモリに存在します
マルチスレッド
はい、-tで入力スレッド数を制御できます
シングルスレッド
マルチスレッド
パフォーマンス
15 W/sのGET、11 W/sのSET
単一例qps:8.5 W程度(GET/SET)(RH 2285)
単一qps:3.5 W程度(GET/SET)(RH 2285)
トランザクションのサポート
同時シーンでcasで一貫性を保証
トランザクションのサポートは弱く、各トランザクションが連続的に実行されることを保証します.1つのオペレーションが失敗した場合、ロールバックされません.楽観的なロックを使用してcasを実現します.
トランザクションはサポートされていません
データ解析
簡単なgetクエリー機能
単純クエリー機能、集合やhashの操作などをサポート
クエリーが便利で、sqlのような文法があり、条件クエリーをサポートします.
シーンの適用
常にフロントエンドキャッシュとして
キャッシュとデータストア、キュー
ビッグデータストレージ
特長
-
pipelineによるクエリー数の削減をサポート
Autosharding,故障自動切替,mapreduceサポート,大ファイル下のGridFsファイルシステム
あんぜんもんだい
現在、認証はありません
パスワード検証のサポート(requirepass)
collectionレベルの認証(auth)をサポート
データのバックアップとリストア
データはメモリに保存され、バックアップとリストアが不便です(stats cachedump)
永続化によるバックアップとリストア
mongodump倍部、mogorestore還元.データエクスポート:mongoexport,mongoimport,エクスポートデータはcsvフォーマットをサポートする
slowlog相関
slowlog関連の設定はありません
slowlogをサポートし、slowlogはデータベースに存在し、slowlog getを使用して関連ログを取得すると、slowlogのサイズに制限があり、それを超えると古い
slowlog(profiling)をサポートし、slowlogはsystemに存在する.profile(capped collection)のcollectionで
ステータス表示
stats
info
mongostat,db.serverStatus(),db.stats()、rs.statsu()など
tunning
1.object sizeはあまり大きくない(デフォルトは1 Mのみ)2.objectのexpires設定(キャッシュにタイムアウトの特徴があるはず)3.データ処理後のキャッシュに適合し、キャッシュ後の処理出力に適合しない
1.vmをオンにして、よくないvalue値をディスクにスワップします.できるだけメモリにデータを格納.フロントエンドはproxyまたはpersistence hashを用いて等化アクセスを実現する.master-slave構造を用いて、読み書き分離を行う.ビッグデータ量の場合、データdumpを永続化する際にサービスに影響を与える場合は、slave側に置くべきである.pipeline集約アクセス7を使用する.NIC bonding
1.インデックス関連(読み書きが少ない場合)2.explain解析クエリー3.戻りエントリ(limit)4を限定する.指定された必須フィールドのみを表示し、すべてのフィールドをクエリーしません.capped collection(特殊業務)6を使用する.replsetsを使用して、クラスタ全体の能力を拡張
  • タイプ-memcacheheredisは、メモリにデータを格納するため、メモリデータベースです.もちろんmemcacheは、画像など、他のものをキャッシュするためにも使用できます.
  • データ型--Memcacheはデータを追加するときにデータのバイト長を指定しますが、redisは必要ありません.
  • 仮想メモリ:物理メモリが切れた場合、長い間使用していなかったvalueをディスクに交換できます.
  • 期限切れポリシー--memcacheはset時にset key 1 0 0 8などのように指定します.つまり、期限切れはありません.Redisは、例えばexpire設定、例えばexpire name 10により設定することができる.
  • 分布式--memcacheクラスタを設定し、magentを利用して主従を行う.redisは主従を作ることができる.すべて一主一従することができます.
  • はデータの安全を保存します——memcacheは電気が切れて、データはなくなりました;redisは定期的にディスクにsaveできます.
  • 災害復旧-memcacheと同様に、redisが失われた後、aofで復旧することができます.