Smile Engineering blog ( スマイルエンジニアリング・ブログ )

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

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

2016-03-31 19:32:30 | 最新技術動向展開
今回はドキュメント指向データベースである MongoDB についてです。

※いまごろ 何故、NoSQLなの? という疑問もありますが、
 著者が触れたくなったのです。

MongoDB はC++言語で開発されたオープンソースのドキュメント指向データベースです。
ドキュメント指向データベースは、NoSQLに分類されるデータベースです。
NoSQLと言いますと、RDB(MS)ではないデータベースで、大きく分けて下記の分類のものがあります。

・キー・バリュー型(Key-Value Store型:KVS型)
・テーブル指向型
・ドキュメント指向型

※テーブル指向型は広義でKVS型の一種とされることもあります。

上記のうち、ドキュメント指向型に属す NoSQL データベースが MongoDB です。

RDBでは、レコードをテーブルで管理する構造となっていますが、
ドキュメント指向型ではドキュメントをコレクションで管理する構造となっています。

<RDBのレコード>
 ドキュメント

<RDBのテーブル>
 コレクション

<RDBのデータベース>
 データベース

MongoDB は、JSONのような形式のドキュメントを管理します。

例えばこんなドキュメントです。
-----
{
  username: "bob",
  address: {
    street: "123 Main Street",
    sity: "Springfield"
    state: "NY"
  }
}
-----

このようなドキュメントを管理、操作できるデータベースが MongoDB です。

MongoDB もそうですが、ドキュメント指向型データベースでは、スキーマ定義が不要です。
MongoDB の場合は、上記のようなJSONライクな構造を決める事がスキーマ定義と同等の役割となります。
同等な役割にはなりますが、RDBのスキーマ定義の概念とは大きく異なる点があります。
テーブルのスキーマにあったレコードしか格納できないのがRDBでの当たり前ですが、ドキュメント指向型データベースの場合は、コレクション(RDBでいうテーブル)にスキーマの異なるドキュメントが格納可能です。

先のドキュメントを users というコレクションに格納したとします。
先に格納してあるドキュメントと構造を合わせなければと思いますが、MongoDB の場合は、次のように例えば「age」という先のドキュメントに存在しなかった要素を保持したドキュメントを格納することが可能です。

-----
{
  username: "tom",
  address: {
    street: "123 Main Street",
    sity: "Springfield"
    state: "NY"
  },
  age: 18
}
-----

イメージはできましたね。

上記のドキュメントを、MongoDB のツール(CUI)を使って登録してみたいと思います。
MongoDB のインストールや、操作の詳細は割愛させて頂き、
CUI実行時のスクリーンショットを貼っておきます。



このような感じです。何となく先の説明と上記CUIのイメージがつながってきましたかね。

users というコレクションを作成。このコレクションにドキュメントを追加(insert)しています。
追加後に、users コレクションに対して検索(find)をかけています。
NoSQL データベース なので、SQL実行ではないですね。



SQLのWHERE句のように条件をつける場合は、どうするのでしょうか。
こちらも、CUI実行時のスクリーンショットを貼っておきます。



findの引数がありますね。findの引数が「{"address.state" : "NY"}」になっています。
ドキュメントの階層構造を意識した条件になっていますね。
「address配下のstateが"NY"のもの」という直感的な条件式ですね。


今回は、ドキュメント指向型のNoSQL データベース MongoDB を触ってみました。


monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、農業も手がけるIT企業

Linuxの勉強を始めよう ~2. Linuxをどこへインストールする?~

2016-03-31 09:00:00 | 最新技術動向展開
前回はLinuxディストリビューションについて紹介しましたが、今日は今時のLinux活用事例について紹介します。


2. Linuxをどこへインストールする?

まずはやってみたいことを簡単に考えてみましょう。
難しく考え始めたらあれもこれもとなってしまい、なかなか着手できずじまいになってしまいがちです。
軽い気持ちで、「サーバーを構築したい」とか「LPICをとってみたい」とか「電子工作をしてみたい」とか
そんなノリで始めて行ったほうが長く続けられると思います。
逆に何も思いつかずに闇雲に進めても長く続けられないかもしれません。
長く継続して勉強できること、それがLinuxの興味へと繋がると思います。

やってみたいことを思いついたら、どこかへLinuxをインストールして自分の環境を構築しましょう。
Linux環境を手に入れるのも、数年前に比べたら非常に環境構築しやすい状況になっています。
オススメは下記のとおりです。

・サーバーを構築してみたい → クラウド環境(IaaS)を利用する
・LPICをとってみたい → 仮想PC(VMware、VirtualBoxなど)を利用する
・電子工作をしてみたい → 小型PC(Raspberry piなど)を利用する
・Linuxをガチで勉強してカーネルハックなどしてみたい → 中古、もしくはジャンクPCを利用する

サーバー運用の仕事をしているので、自分用のサーバーをどこかに用意したいという方は、
IaaSといったクラウドサービスを利用することがおすすめです。
仕事ではMicorosoft Azure、AWSなどを利用されてる方も多いかと思いますが、
個人での利用する場合は、さくらインターネットやConoHaといった、もう少し安価で利用できるものでも十分でしょう。
1ヶ月600円くらいから利用できるものもありますので、
自宅サーバーを構築して電気代がかかってしまうよりも、安くて使いやすいかもしれません。

手元にちょっとしたLinuxマシンを置いておきたいという場合は、Raspberry piといった小型PCを使うのがおすすめです。
Raspberry piはいくつか種類がありますが、3000円くらいから利用できるものもあります。
ちょっと面倒くさいと感じる箇所もあるかもしれませんが、いろいろ弄りながら遊べるという点は魅力的です。

環境を何度壊してもいいからLinuxをガチで勉強したいという場合は、
中古PC屋やジャンク屋に行って、古いPCを購入してしまうのもありだと思います。
5年位前のCore2Duo世代のPCであればLinuxは十分なほど動きますし、値段も5000円位から手に入るでしょう。
オープンソースカンファレンスなどへ足を運び、展示ブースを見渡すとわかるかと思いますが、
ガチなLinux使いほどちょっと古めのPCを常用マシンとしていたりするものです。


3. コミュニティー活動にも参加してみよう!

さて、Linuxがインストールが終わって一見落着!
…ではなく、ここからがLinuxを始めるスタートラインです。
ただインストールした後でも、この後何をしよう?とか、ここがわからなくて先に進めない!なんてことがあると思います。
そんな時に役に立つのがコミュニティーです。

OSSのコミュニティーの活動はソースコードを書くことだけではありません。
バグを報告すること、それによってバグが解決されることも、OSSコミュニティーには重要な要素となります。
ただし、OSSのMLなどは有償のサポートセンターではありませんので、少しだけ注意が必要です。
あまりいい加減な質問をしてしまうと、誰にも相手にされない可能性もあります。
まずは何がしたくて何ができなかったのか、明確に伝えられるようにしましょう。
難しいと思ってしまうかもしれませんが、これもひとつのスキルですよね!

(参考)技術系メーリングリストで質問するときのパターン・ランゲージ( http://www.hyuki.com/writing/techask.html

やっぱしMLなどは堅苦しくてそんなのムリ!という方は、勉強会などに参加してみてはいかがでしょうか。
勉強会にもいろんなパターンがありますが、懇親会がある場合にはその場で知ってそうな人に聞いてみるのもひとつの手です。
また、下記のLinuxユーザグループ(=らぐ)では活動報告会形式をとっています。
いろいろやってみて躓いた話などをすると非常に盛り上がるので、ぜひ一度足を運んでみましょう。

(東京)小江戸らぐ( http://hatochan.dyndns.org/koedolug/
(主に東海地方)東海道らぐ( http://tokaidolug.colorfultime.net/
(関西)LILO( http://lilo.linux.or.jp/
(鹿児島)鹿児島らぐ( https://kagolug.org/

※筆者の知ってる範囲で記載しました。ここでもやってるという方がいらっしゃいましたら一報をお願いいたします。

また、全国各地で開催されるオープンソースカンファレンスなどに足を運ぶと、
Linuxのことに限らず、オープンソースに関するあらゆる展示、セミナー等が無料で見ることができます。
このようなイベントに足を運んでみるのも、興味を持つひとつのきっかけになるかと思います。

・オープンソースカンファレンス( http://www.ospn.jp/ ) ※2/26,2/27は東京で開催されます!
・関西オープンフォーラム( https://k-of.jp/ ) ※2015年のURLに飛びますが今年もあると思います


最後に。
最初から大きなことをするよりも、小さなことから少しずつ始めるのがいいかと思います。
もちろん失敗はつきものです。
失敗しても、その次へと継続することが大切だと思います。

それではLinuxを楽しんでいきましょう!
Have a lot of fun!!!

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

Linuxの勉強を始めよう ~1.Linuxディストリビューション編~

2016-03-11 09:30:00 | 最新技術動向展開
今年ももう(?)2ヶ月が経過しましたが、「今年こそは新しいことを勉強していくぞ」という方に向けてのお話です。

ここ最近、エコシステムというキーワードとともに、OSSの活用が徐々に注目されつつあります。
そのOSSを活用していく中で、どうしても避けては通れないものはLinuxではないでしょうか。
しかしLinuxを勉強するのにどこから手を付けていいのか、迷っている方も多いかと思います。
今回は今時のLinuxの学び始めを紹介していきます。
今日はまず、今時のLinuxディストリビューションについてです。


1. Linuxディストリビューションは何を選ぼう?

 Linuxディストリビューションとは、コミュニティーなどがLinuxを使いやすい形にまとめて、配布しているもののことを言います。
 Linuxをインストールするのに一番手っ取り早い方法は、Linuxディストリビューションを利用することでしょう。
 初心者の方は、比較的情報の集まりやすいUbuntuから始めると、とっつきやすいと思います。
 また仕事でLinuxを触れてる方は、仕事と同じディストリビューション(主にCentOSやFedoraでしょうか)を使ってみるのもありでしょう。
 ですが本気でLinuxを学びたい場合は、敢えて仕事とは違うディストリビューションを使ってみても面白いと思います。
 ここでは、CentOSやUbuntuといった誰でも知ってるディストリビューションの紹介は割愛して、
 上記以外で是非とも知っておきたいディストリビューションを3つ紹介します。


 ・Debian( http://www.debian.or.jp/ ) ~非常に活発な開発コミュニティー~

 DebianはUbuntuの派生元ディストリビューションとして有名ですが、その魅力はなんと言っても豊富なパッケージ数でしょう。
 これはDebianの開発者が非常に多いという点に起因していると思います。
 日本語ML(メーリングリスト)もユーザ用と開発者用がそれぞれあり、どちらも非常に活発なMLです。
 他のディストリビューションとは比較にならないほどの投稿数となっています。

 最新バージョンであるDebian 8(=Jessie※)では、インストール時にデスクトップ環境が選択できるようになっており、自分好みのデスクトップをインストールできます。
 Debianの場合、デスクトップ環境にはGNOME, Xfce, KDE, Cinnamon, MATE, LXDEと非常に豊富な選択肢がありますが、
 これもやはり開発者数が多いからこそ成せるものでしょう。
 なおDebianでは、ややハイスペックなPCを利用する場合はGNOME、古めのPCで動かしたい場合はXfceを選択する方が多いのではと思います。
 ※ちなみに、Debianのコードネームは全てトイ・ストーリーのキャラクター名になっています。

 Debianプロジェクトには、Debianフリーソフトウェアガイドライン(DFSG)と呼ばれるガイドラインが存在し、
 Debianが考える「フリーなソフトウェアとは何か」というのを定義して、これを満たしたフリーソフトウェアでDebianは構成されています。
 このようにガイドラインを明確にすることで、開発者を増やしていったのかもしれませんね。

 ・The Debian Free Software Guidelines (DFSG)( http://www.debian.org/social_contract#guidelines
 ・「あなた」と オープンソース/フリーソフトウェア、 そして「Debian」 (やまね氏の解説)( http://www.slideshare.net/henrich_d/20081107-k-ofsession

 毎月、東京Debian勉強会( https://tokyodebian.alioth.debian.org/ )、関西Debian勉強会( https://wiki.debian.org/KansaiDebianMeeting )も開催されています。
 興味のある方は是非そちらも参加してみましょう。


 ・Linux Mint( http://linuxmint-jp.net/ ) ~DistroWatchで常にトップのディストリビューション~

 DebianはUbuntuの派生元ディストリビューションでしたが、Linux MintはUbuntuの派生先ディストリビューションですね。
 日本ではあまり知られていないディストリビューションかと思いますが、
 DistroWatch( http://distrowatch.com/index.php?language=JP )のページヒットランキングでは、2011年から常にトップをキープしています。
 (こうしてみるとFedoraやCentOSに偏向しがちな日本はちょっと特殊なのかもしれませんね…)

 Linux Mintのデスクトップ環境は、Debianほどではありませんがやはり豊富な選択肢があります。
 Debianのようにインストール時にデスクトップ環境を選択するのではなく、
 インストーラそのものが、Cinnamon版、MATE版、KDE版、Xfce版と分かれています。
 (Mintというと、ちょっとハイスペックなPCの場合はCinnamon、古めのPCでさくさく動かしたい場合はMATEを使う方が多いようです)
 なお最新版のLinux Mint 17.3はUbuntuベースとなっており、インストーラもUbuntuとほとんど似たものとなっていますが、
 DebianベースのLMDE2というものも存在し、Debianに慣れた人はこちらの方がおすすめでしょう。
 Linux Mintの使い方などについては、下記のドキュメントをご覧ください。

 ・Linux Mint Cinnamonエディション オフィシャルユーザーガイド(PDF)( http://www.linuxmint.com/documentation/user-guide/Cinnamon/japanese_17.0.pdf
  (Linux Mintのコードネームは女性の名前だったのですね…)

 使い勝手としては、Ubuntuと似たようなUIながら、さらにシンプルで初心者に扱いやすい印象を受けます。
 日本語環境を整えるのがやや手間がかかる面もありますが、
 そこさえ乗りきれればとても扱いやすいディストリビューションと言えるでしょう。

 世界で最も注目されているディストリビューションLinux Mintを、是非試してみてはいかがでしょうか。


 ・openSUSE( https://www.opensuse.org/ ) ~YaSTでサーバーからデスクトップまでオールマイティーなディストリビューション~

 最後に紹介するのは、こちらも老舗のひとつであるopenSUSEです。
 某Linuxの雑誌にその特徴を「欧州」という(謎の)分類で紹介されてしまうほど、ヨーロッパでは非常に根強い人気を誇っています。
 openSUSEというとデスクトップ環境はKDEと思われがちですが、正確にはKDEの他、GNOME、Xfceなどがインストール時に選択できます。
 比較的古いPCで利用したい場合は、Xfceを選択するとさくさく動くと思います。

 openSUSEの特徴といえば、なんといってもYaSTでしょう。
 YaSTはWindowsでいうところのコントロールパネルみたいなもので、メニューを選択していくだけであらゆる設定ができてしまいます。
 それだけにとどまらず、アドオンを追加していくことでApacheやSambaといったサーバーの設定も全てYaSTから行えます。
 そのため、簡単なテストサーバーを構築したりするときには、非常に便利なディストリビューションと言えるでしょう。
 裏返すとほとんどメニューから選択するだけで何でもできてしまうため、設定ファイルの使い方などを覚えられなかったりします。
 LPICの勉強にはあまり向いていないかもしれませんね。

 また昨年11月にリリースされた最新版openSUSE Leap 42.1では、商用版であるSUSE Linux Enterpriseとコアな部分を統合しました。
 これによりオープンソースでありながら、商用版と同レベルの安定性に達することを期待されています。

 ・openSUSE Leap 42.1 とは? (ちょっと古い記事ですが)( http://www.slideshare.net/ftake/opensuse-leap-421

 最近ではopenSUSEの日本コミュニティーもコミケで冊子を販売するなど、徐々に活発になってきました。
 まだopenSUSEを使ったことがない方は、是非一度お試しいただけたらと思います。


・まだまだ他にもある…

 他にも注目されているLinuxディストリビューションは沢山あります。
 ・ローリングリリースモデルで注目を浴びているArch Linux
 ・某国立大学で絶大な人気を誇るGentoo Linux
 ・Windowsに画面がそっくりで初心者にも優しいZorin OS

 その他にも挙げればキリがないほど沢山あるので、いろいろ試して自分に合ったものを使ってみるのが一番でしょう。

 次回はLinuxを活用する方法を紹介していきます。

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

データ転送

2016-03-11 09:00:00 | 最新技術動向展開
今回はデータ転送について、紹介していきたいと思います。

現在のコンピューター内では、記憶媒体へのデータ転送はシリアルATAという規格が主流となっていますが、
シリアル以前にはパラレルケーブルによるデータ転送しかありませんでした。

パラレル転送は複数の経路を使い並列でデータ転送するのに対し、シリアル転送は1本化したデータを転送します。
普通に考えれば、パラレルの方が効率が良いように思えるのですが、同時に転送したデータが揃うまで待ち合わせが発生する
という制約によりシリアル転送を高速化する流れが主流となり、現在に至っています。

では、パラレル方式のデータ転送から紹介して行きましょう。

◆IDE(Integrated Drive Electronics)

 コンピューターと記憶媒体の接続方式として規格化されたものは、これが最初だと思われます。
 しかし、容量が504MBを超える領域が認識できない問題があり、次のEIDEが登場します。

◆EIDE(Enhanced IDE)

 1994年頃に504MBの限界を超えるための拡張がIDEに施されました。
 さらに、転送モードによる高速化やATAPI規格対応も行われました。
 パラレルケーブルは40芯か80芯のフラットケーブルなのですが、
 プライマリー(マスター/スレーブ)とセカンダリー(マスター/スレーブ)の標準化により
 最大4台まで接続可能となりました。

◆ATAPI(ATA Packet Interface)

 当時の記憶媒体として、HDDを除けばCDドライブがメインでしたが、IDE規格では
 制御コマンドが存在せずHDD以外は接続できませんでした。
 そこで、SCSI形式の制御コマンドを発行できる規格として登場しました。

 ちょうどこのあたりが、Windows95が登場した時代です。

◆ATA33/ATA66/ATA100/ATA133

 EIDEの頃に出てきた転送モード(モード名はUDMAXX)で、改良された規格が続々と現れます。
 転送速度は33~133MB/sなので、今となっては速さは感じませんが、新しい規格が世の中に出るたびに
 わくわくしながら新しいマザーボードに買い替えていた気がします。

◆SATA/SATA2/SATA3

 パラレルからシリアルへ移り変わりの際、速度のメリットよりもケーブルがスリムになったことで喜んだものです。
 転送速度はというと、SATAが150MB/sでSATA2で300MB/sになり、SATA3だと600MB/sです。
 旧世代のパラレル転送を上回り進化を続けていますが、そろそろ理論的に限界が見えているようでもあります。
 HDDよりもデータ入出力が格段に速いSSDで、500MB/sを超えるものも出回ってきていて
 このままだとSATA3の次の規格が出てくるか、別の規格へシフトしそうなところです。

過去の記事で、CPUのスペック的な理論限界値を迎えてからの動向を紹介しましたが、
データ転送に関しては、まだまだ行けそうな雰囲気はあります。
コンピューター内部の機器同士を繋ぐ規格を含めれば、もっと速い規格があるからです。
とはいえ、CPUが電気の伝わる速度が原因で性能的な限界を迎えたのと同じように、
データ転送も最終的には、電気の伝わる速度によって限界を迎える日が来るのでしょうか・・・

と思っていたら、SATA ExpressとかM.2とか新しい規格があるし・・・

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業