NoSQLについて何か
この記事は aratana Advent Calendar 2017 - Qiita 11日目の記事です。
お疲れ様です! アドベントカレンダー&25歳での初投稿となります。
前回は穗滿さんによる「会社に所属してようが独立しようが、収入に困らず、社会的に存在意義のある人になる思考と目標を持とう」というお話でした。 社会人1年目の僕には(もしかしたらまだ早く、)少し難しいところもありましたが、 「自分の社会的な立場」を考える良い機会になりました。
というわけで?今回、どこに需要があるか分かりませんがNoSQLについて思ったことをしたためようと思います。
NoSQLとは
みんなの先生ことGoogle先生に聞いてみますと、 1ページ目の NoSQL とは?(NoSQL データベースの解説と SQL との比較)| AWSより、
NoSQL は、高性能の非リレーショナルデータベースを指す用語です。NoSQL データベースは、ドキュメント、グラフ、キー値、列指向など各種データモデルを利用します。NoSQL データベースは、開発のしやすさ、スケーラブルなパフォーマンス、優れた可用性、高い回復性で知られています。
と言う答えをいただきました。 リレーショナルなことを止めて, 違う特性を持とうとしているのが感じられます。
どんなものがあるのか
たくさんあるのですが、個人的に触ってみたのは
- MongoDB
- DynamoDB
の2種類です。 他のNoSQLについては
辺りを参考にどうぞ。
どういうときに使うのがよさげか
それぞれの特徴を考えると、
- MongoDB → 掲示板
- DynamoDB → 画像投稿サイト
なんかがよさげに思えましたので、それぞれ簡単に説明します。
MongoDB による掲示板の実装
今までのリレーショナルなDBでは正規化をしていくとこんな感じになると思います。
スレッドテーブル
スレッドid | タイトル |
---|---|
1 | ○○な件 |
コメントテーブル
コメントid | スレッドid | コメント |
---|---|---|
1 | 1 | 1コメ |
2 | 1 | 次のコメント |
そして、スレッドテーブルとコメントテーブルを基に SQLでうまく結合してデータを表示することになると思います。
MongoDB で実装すると、こんなことができます。
スレッドid | タイトル | コメント |
---|---|---|
1 | ○○な件 | {{コメントid: 1, コメント: 1コメ}, {コメントid: 2, コメント: 次のコメント}} |
1レコードで済んじゃいます。 なんせ1レコードの上限サイズは16Mなので簡単なテキストだけならこの実装で問題になることは少ないと思います。
DynamoDB による画像投稿サイトの実装
こちらは、どちらも似たようなシンプルなテーブル構成になります。
id | タイトル | 説明文 | uri |
---|---|---|---|
1 | Image | 画像 | https://〜〜 |
こちらは、uriの保存先を同じAWSのS3にすることにより、 可用性、回復性という特徴を活かすことができると思います。
まとめ
NoSQLについて思っていることを書いてみました。 今までのリレーショナルなDBと違う点をどう活かせば楽しいかということを、 小さなサービスで試していくと楽しそうだと感じました。
個人的には「MongoDBの薄い本」という絶妙なネーミングのPDFが分かりやすかったです!
http://www.cuspy.org/diary/2012-04-17/the-little-mongodb-book-ja.pdf
アドベントカレンダー次回予告
明日は、アラタナ最年少エンジニアの蔭山さんからServerless Framework, TypescriptとJavaScriptづくしなお話です!
JavaScript関連(ES6)の設定の話
JavaScript関連で, ES6が面白そうだったので
それに対応した環境を作るためのメモになります.
Windows 10 の Firefox 47.0.1 で Selenium を Python3 から動かす
Firefox 47 のアップデートで Selenium が動かなくなってしまったけど,
47.0.1 になって動くようになったとのことなので試してみました.
Firefox — Notes (47.0.1) — Mozilla
Emacsで no undo information in this buffer と怒られて過去に戻れなくなったときの対処法
Emacs で色々編集しているとき、突然「no undo information in this buffer」と言われ、 途方に暮れたときの備忘録。
M-x buffer-enable-undo
とすることで undo が復活するみたい。 それでもダメだった場合はバッファを開き直す感じで。
2017年05月17日追記
(global-auto-revert-mode 1)
を設定から削除すると大分落ち着いた気がする。