Blank?=Falseスマートフォン用の表示で見るBlank?=False「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々Blank?=Falseこの広告は、90日以上更新していないブログに表示しています。NoSQL先日、MongoDBの記事を書きました。stonebeach-dakar.hatenablog.comそもそものNoSQL自体をよく知らないので勉強してみました。SQLの略で、RDB(リレーショナルデータベース)以外のデータストアをそう呼びます。SQLの解釈は人によって違い、SQLだけじゃないとか色々有るようです。内部的なデータ構造はKVSやドキュメント指向データベース等があります。Strageの略で、1つのキーに1つのデータが関連付けられたデータストアのタイプです。プログラミングで言えばハッシュがそれに当たります。RDBでも1つのテーブルに主キーがあって、その主キーを使うことでそのキーに従属したデータを取り出せる様になっています。主キーがないテーブルもあるので、KVSは必ずキーを必要とする点がRDBのデータ構造と異なります。ドキュメント指向データベースって?RDBではスキーマ(テーブルのデータ型とか長さとか)を持っており、そのスキーマに適合しなければデータを保存できません。このドキュメント指向データベースはそのスキーマを持たず、基本的になんでも受け入れます。MongoDBならバイナリも受け入れることができます。この柔軟さを活用して、オブジェクト指向プログラミング言語のオブジェクトをそのまま保存したりといった用途にも使われるようです。どんなソフトウェアがあるの?CassdandraApacheが開発するオープンソースのNoSQLデータストア。もとはFaceBookが大規模データストアとして開発、オープンソースとして公開された後その後Apacheへ移行したもの。内部データ構造はKVSを採用している。完成されたNoSQLで、すでに多くのシステムでの実績あり。familyとしてグルーピングされる。familyはCassandraデータベースが作成される際は固定されているが、後にfamilyに対し列を追加することは可能である。列は特定のキーにのみ追加されるので、どのfamilyにおいても異なるキーは任意の列数を持つことができる。familyの値は連続して記録され、このことによりCassandraは列指向データベース管理システムと行指向データベースシステムの複合型であると言える。Wikipedia(゚Д゚)ハァ?何言ってるんだかよくわからん。MongoDB前回の記事を見てください。stonebeach-dakar.hatenablog.comMySQLMySQLそのものはRDB、プラグインを導入することでNoSQLデータストアとして使えるようになる。なんてのはちょっと待って下さい。速いことは速い、ただしRDBで出来てNoSQLではできない、ということはとても多いです。世の中そんなうまい話はない!あくまで限定用途向けのDBMS基本的にNoSQLは「結合」が苦手です。幾つかのテーブルにデータを分けておき、必要な時にJOINしてデータを取り出す...と言った用途には向きません。幾つかのテーブルに分けることができない、ということは正規化できないわけです。いくつかの重複するデータをNoSQLデータストアでもつ必要になります。いった事情から、NoSQLは単純なデータを大量にもち、高速に読み書きするといった用途に特化しているといえます。RDBMSでだいたいのことは出来るぶっちゃけ、RDBMSで何に困っていますか?読み込みが遅いとか処理が遅いというのはあるかもしれません。それはネットワークの通信速度がボトルネックだったり、パフォーマンスが出ないアルゴリズムだったりと色々な可能性があります。データの読み書きはSQLでたいてい事足りますし、SQLでできないことはアプリケーション側で解決できます。複雑なSQLを書くしかないから...と言う話もありますが、NoSQLのデータ問い合わせでも複雑に書けるのでそこまで大きくは変わらないと思います。一部一部にNoSQLでデータを管理する、という使い方になるのではないでしょうか。RDMBSの速度改善そもそものRDBMSの速度のボトルネックとなっていたのはHDDのアクセス速度です。HANAを始めとして昨今はメモリの大容量化により、すべてのデータをメモリ上に置くことでRDBMSの速度を改善した製品が出て来ています。一昔前程速度ガー、という話はあまり聞かなくなってきています。NoSQLって結局いらない子?って思いわれそうですよね。ぶっちゃけ、個人的には真面目に勉強して使いこなす程の価値はまだないかな・・・と思います。いうより、エンタープライズな案件だと信頼性が低い(トランザクションの問題など)で本採用されることは殆どないので、TwitterやFaceBookのようにBtoCな案件で使うことになるのかなとどう使っていくか最近の仕事のメインがExcelやAccessのVBAでのデータ処理プログラム開発なのですが、ここで大量のCSVファイル(1000個超とかもザラ)を読み込んで解析するプログラムを書くことが有ります。いった時にVBAの配列やワークシートに全部のファイルを読み込んで、上から下に探索するようなプログラムを書かざるを得ない事があります。いった、単純な大量のデータをNoSQLデータベースに読み込んでおいて、必要な時にデータを取り出せるようなインターフェースを作るとNoSQLのメリットを引き出そうです。関係データベースのような様々な関係性を使ったデータストアではなく、単純に同じ形のデータを大量に持ち、何回も検索するとかそういった用途に向いていると思います。CodeZineにもそんな感じで解説されていました。codezine.jpそういえばこんなの作ってた。NoSQLを勉強してみて、VBAで開発したデータベースライクな汎用データクラスに似ているなーと感じました。github.comもともとはExcelでワークシートでデータの保存とかをやると処理速度的に遅いので、メモリ上で使える2次元データ構造がほしかったので作ったものです。説明が超テキトーですが、ようはハッシュ表のそれぞれのキーに1行分のレコードを持つという感じです。元ネタはRubyOnRailsのActiveRecordが実際にデータを持てるとしたら...という感じで考えました。GitHubに上げているものはバージョンが古いのですが、現在はWHEREにも対応し、ほぼNoSQLのように使える様になっています。実際のNoSQLはもっと色々考えられているのですが、イメージとしてはこれのスゴイヤツかな、という感じ。まとめ今回、データベースのデータ構造とかそういったものを初めてまともに勉強したわけですが、半分くらいよくわかってません。データベーススペシャリスト試験では出てこないと思いますが、こういうことを理解しておけばよりデータベースの活用提案ができていけそうだなと思いました。MacOSXにMongoDBをインストールしてみた。»Profile某製造業の社内Sler。今のお仕事のメインはAccessとVBA。元パッケージソフト開発者。VBA、そしてRDBやNoSQLを組み合わせたアプリケーション開発を得意としています。福岡県、もしくは熊本県へIターン転職に向けて、DB/NoSQLの業務に関われる会社を探しています。レベル1取得しましたリファクタリングの帽子をかぶるということ勉強は大変だが役に立つCUIなCentOS7にcinnamonを導入するLinuxのコマンドはMacOSXでそのまま動くとは限らない月別アーカイブTwitterGooglePocketはてなブログをはじめよう!stonebeach-dakarさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。