MongoDBについて簡単にまとめる

MongoDBのセミナーへ参加。その内容を備忘録としてまとめる。

 

MongoDBの前にNoSQLについて。

NoSQL

 非構造データ、ビックデータ処理はRDBMSでは不向き。

 そこで出てきたのがNoSQL

 ちなみにここ2年で全データの9割が作られているとのこと。⇒ビックデータ

 生成されるデータの8割が非構造データであるらしい。

 

ちなみに非構造データとは

 情報を出す側で構造を変える。

 RDBMSは、最初に構造を定義する必要がある(スキーマ

 よって非構造データは構造が変わるのでRDMBSでの管理は不向きになる。

 最初は管理できても構造が変わればスキーマを拡張。列がめっちゃ増えるってことか。

 

RDBMSは、スケールアップでは性能限界がくるしスケールアウトもできなくないがコストがめっちゃ高くなる(Oracle クラスタなど?)

そんな背景もあってNoSQLが登場。

 

MongoDBとは

 ドキュメント指向型のデータベース。

 ちなみに、列指向型がKVSとなる。

 ドキュメント指向=JSONで扱う。

 JSON(階層型データ)とは、軽量なデータ交換フォーマット。

 XMLシンプルで読みやすい。(JSONとかあんまり詳しくない。。。)

 

 MongoDBを一言でいうとRDBMSとKVSのいいところどり。

 KVSに比べてリッチなデータモデル。ちなみにKVSは2値。

 RDBMSのようにインデックスも張れる。DynamoDBもはれるが5つまでと制限があるとのこと。

 

 RDBMSと比較して強いところは、水平分散(シャーディング)が得意なのと複製が簡単であること。

 つまりは、水平と垂直両方が得意ってことらしい。

 

 あと、セットアップが非常に簡単である。

 RDBMSを使ってた人が使いやすいように作られている。

 (セットアップの容易さと分かりやすさをめっちゃアピールしてました。)

 

 MMS(MongoDB管理サービス)なんてのもある。

 

 注意点は以下。

  トランザクションが無い

  外部キー、結合がない

  スキーマがない

  集計分散はしない

  ※いくつかアンチパターンもあるもよう。こちらは導入時には注意が必要。

   特にシャーディングキーの設計は重要。(シャードキー)

   でないと一つのノードに負荷集中してだんだん遅くなるってのもあるとのこと。

 

MongoDBはクラウドでの利用が多い。それはアジャイル的な利用に向いているから。

テーブル設計などせずにすぐに、簡単に始められるってこと。またRDBMSを知っている人であれば敷居は低いため。

 

RDBMS:数字の世界(構造データ、トランザクション

NoSQL:数字以外の世界(非構造データ)

Hadoop:バッチ性の高い処理

 

そもそもの普及の背景にはRDBMSでは管理しにくデータが増えてきたこと。※決してRDBMSに置き換わるものではない。

RDBMSは設計とくにスキーマ設計にとても時間がかかっていた。

設計の違いでいうといかになる。

 RDBMS:データの格納パターンに重きを置いている

 NoSQL:データのアクセスパターンに重きを置いている(Read,Writeがどんな風に発生しているか)

 

アクセスは基本オンメモリ処理。よって安価なサーバを横にならべてスケールアップで拡張可能。アクセス頻度が低いものはSSDなどへ格納。

 

KVSとの違いは?

 KVSは超シンプル(2値管理)。よって超高速処理むき。こちらはめっちゃとがった製品のイメージ。とがったといえばグラフ指向も(Neo4j)

 逆にドキュメント指向はとてもわかりやすいもの。RDBMSとKVSのいいところ取りをしている感じ。

 

事例もいくつかあったが身近なところで、ログ管理で使ってみたいな。

Fluentdで収集してその保管先がMongoDBって事例がある。

 

この方の公開している資料が参考になります。

初心者向けMongoDBのキホン!

 

HTML5

既存のHTML4.01の拡張版。

今まではHTML4.01の拡張はなくプラグインや各ブラウザで拡張していった感じ。

Flashもその一つ。

AppleFlash対応しないのはHTMLの標準ではないため。HTML5を推奨している。または促進したいため。

HTML5に大きく2つの内容がある。

・ブラウザによる違いをなくし共通仕様の策定(ワンソースマルチデバイス)

 ⇒いまはブラウザごとに表示レイアウトが異なったりするので対応ブラウザやブラウザごとにシステムを構築している。

 

・機能拡張

Ajaxによるだいぶ動的になっているがさらにWebシステムのUIというかUX向上のための機能拡張。これによって近い将来Webブラウザがあればいかなるシステムも使い勝手のいいものになるだろう。

 

・課題

HTML5の策定に時間がかかっている。共通仕様として作っているのに各社がHTML5対応といって独自に展開している部分も多々ある。

 

またパフォーマンスのまだあまりよくないようだ。以下参考。

Facebookは「これからはHTML5の時代だ」として、2012年にスマホ用クライアントソフトをHTML5化しましたが、「遅くなった」などの批判を受け、ネイティブで書き直しました。ネイティブというのは、特定のデバイスに依存した環境で作成されるソフトで、パフォーマンスを上げやすく、UIやUXの作成も柔軟に行えますが、デバイス毎にソフトを用意しなければなりません。しかし、現時点では、HTML5よりもネイティブのほうが顧客満足度は高いのです。

あと、モバイルブラウザ等はHTML5に対応しているがPC側で使われているブラウザにはまだまだ対応していない古いものも多い。

 

不安な気持ち・・・

仕事に対していろいろと不安な気持ちになることが多い・・・

・トラブルに対して

・自分の今後に対して

 

・トラブルに対して

電話恐怖症になりつつある。。。安定したシステム基盤を構築して今の運用から解放されたい。

そしてお金を稼げるビジネスを考えるポジションにつきたい。

その為に今の仕事をこなし、引き継ぎつつ時間を見つけて新しいことを自分の中で初めていくしかない。その中で目の前をチャンスまたはピンチ(というなのチャンスなのかもしれないが)が通り過ぎようとした場合には自らの手で捕まえなくてはならない。

 

・自分の今後に対して

方向性は定まっていない。。。技術なのかマネージなのか、企画なのか。フルスタックエンジニア。オールマイティが求められている世の中。全体がわかる、把握できるようになることが大事なのかな。

 

・自分のダメなとこ

最近は逃げたくなること多々(笑

気持ちに余裕がなくなる

そんな時こそ冷静になる必要があるんだろうな。

他の人は他人事のようなときもあるし。そのぐらいのほうが良いのだろうか。

つぶれない程度に頑張ろう。そして自己をステップアップさせていこう。

このご時世、チャンスはたくさんある。

逃げずに対応することがとても大事。

 

時間を有効に使おう。

時間は有限。技術、企画両面をステップアップしていこう。

メリハリが大事ってこと。

 

不安な気持ちを吐き出して少しは楽になれたかな。。。

目の前のタスクを処理しつつ、数年後の自分を意識して前を向いていこう。

 

数年後の自分とは・・・今年の初心表明を忘れずに。。。

ログ管理でFluentdを使えるか調べてみる

Fluentdとは

ログを収集し格納するためのログ収集基盤ソフトウェア。

Fluentdにインプットされた、すべてのログをJSONに変換し、アウトプット。

インプットとアウトプットはモジュール化されており、モジュールを追加することでインプット元とアウトプット先を追加できるようになっている。

 

何が良くなるの?

・ログのフォーマットが簡単に合わせられる

 ソースのログの種類により通常はログの形式は異なる。これを統一フォーマットにしてくれる。(JSON形式)

複数のログを簡単に管理できる

 Syslog、アプリケーションログなどいろんなログを管理できる。これはFluentdが多数のInputプラグインを持っているため。また出力先もOutputプラグインが多数あり複数の選択肢がある。

 リアルタイムでの分析も可能。分析用のDBとしてOutput先にはNoSQLデータベースとしてMongoDBの選択が可能。

 

疑問点

・Syslogでの管理ではダメなのか?

 アプリケーションログは別フォーマットになるから統合管理は無理?

 Outputがファイル出力のみ?

 

今後

・実際に実装および使ってみよう

 

<参考>

ここめっちゃわかりやすい

Fluentdで始めるリアルタイムでのログ有効活用 (1/4):CodeZine

ここも参考に

柔軟なログ収集を可能にする「fluentd」入門 - さくらのナレッジ

オブジェクトストレージへの保存

30分でできる!オブジェクトストレージへのログ保存(fluentd編) | IDC Frontier Engineers' Blog

10の実践逆引き集

Fluentdが流行る理由がいま分かる、10の実践逆引きユースケース集 - Y-Ken Studio

@IT記事

今さら聞けないfluentd〜クラウド時代のログ管理入門(1):増えるログ、多様化するログをどう効率的に運用するか (1/2) - @IT

Zabbix連携

CentOSでfluentdとzabbixを使い始めたメモ | taichino.com

fluent-plugin-zabbix リリース - 酒日記 はてな支店

RDBとNoSQLについて

そもそもRDBって?

 ・トランザクション処理向き

トランザクション処理とは 【 TP 】 【 transaction processing 】 - 意味/解説/説明/定義 : IT用語辞典

 ・ASID特性

  Atomicity(原子性、不可分性)とは、トランザクションに含まれる個々の手順が「すべて実行される」か「一つも実行されない」のどちらかの状態になるという性質である。Consistency(一貫性)とは、トランザクションの前後でデータの整合性が保たれ、矛盾の無い状態が継続される性質である。

Isolation(独立性、隔離性)とは、トランザクション実行中の処理過程が外部から隠蔽され、他の処理などに影響を与えない性質である。Durability(耐久性、持続性)とは、トランザクションが完了したら、その結果は記録され、システム障害などが生じても失われることがないという性質である。

ACID特性とは 【 Atomicity Consistency Isolation Durability 】 - 意味/解説/説明/定義 : IT用語辞典

 ・リレーショナルとは?結合すること。

ゼロからのリレーショナルデータベース入門(1):そもそもリレーショナルデータベースって何? (2/3) - @IT

 

NoSQLとの比較

この比較がわかりやすいかな。

第1回 RDBMSとNoSQLデータベース:NoSQLデータベースを試してみる|gihyo.jp … 技術評論社