2015年03月14日

シンボリックリンクとハードリンク

この記事はDBとは全く関係がないが、他に入れるところがないので「データベース」のカテゴリに入れることにした。私から見れば、DBもUNIXもどちらもインフラ面に変わりはない。

先日、パートナー社員がメールでZIPファイルを送ってきたのだが、Windowsで解凍してみたら、中のソースが文字化けしていて全然読めないということがあった。どうしてこんなことになったのか聞いてみたら、zipコマンドに間違えてyオプションを付けてしまい、実体ではなくシンボリックリンクを圧縮して送ってしまったらしい。

この出来事をきっかけに、そもそもシンボリックリンクハードリンクは何が違うのかということを考え始めた。私はLinuxをあまりちゃんと使ったことがないので、両者の違いについてよくわかっていなかったのである。

少なくとも、私がLinuxでリンクを貼る時は、シンボリックリンクを使用する。その理由は、シンボリックリンクはWindowsのショートカットと同じように扱えて、わかりやすいからである。

シンボリックリンクとハードリンクの違いは何だろうか。細かい仕様や運用上の使い分けはいろいろあるのだろうが、最大の違いは、リンクを削除した時に実体のファイルがどうなるかという点だと思う。シンボリックリンクを削除しても実体は消えないが、ハードリンクを削除した場合、もしそのリンク数が1だった場合、ファイルの実体は消えてしまう。だからはっきり言って、私みたいな一般ユーザにとってハードリンクは怖いのである。(つまり、何が起こるか予測がつかないということ。)

前述のように、シンボリックリンクはWindowsのショートカットに極めて近く、ハードリンクはWindowsにはない概念である。(実際は、Windowsにもハードリンクの仕組みが存在するが、運用上で使用されることはまれだとされる。)また、シンボリックリンクもショートカットもコンピュータ用語では「ソフトリンク」に含まれる。

重要なのは、ハードリンクである。おそらく、私みたいな一般的なWindowsユーザにとってハードリンクの概念はやや理解しづらいものだろう。ハードリンクを一言で言えば、「iノードへのポインタを保有するファイル」となる。Unix系システムには、iノードという概念がある。iノードというのは、ファイルやディレクトリなどのファイルシステム上のオブジェクトに関する基本的な情報が格納されている場所だ。つまり、メモリアドレスみたいなものだと思えばいい。ハードリンクは、このiノードを参照する。

で、「iノードを参照する」っていうのはどういう意味なの?というと、ハードリンクは実体へのファイルパスではなく、iノードへのポインタを指し示している。従って、実体を変名したり、別の場所に移動したりしてもリンクが切れることはない。そして、ここで「実体のファイル」と言っているものについても、単に「先に張られたリンク」というだけで、一つのファイルが別の場所に2つ同時に存在するのと変わりはない。(ハードリンクそのものがファイルの実体であるということ。)

私はたったこれだけのことを学ぶのに、同僚のエンジニアにしつこく質問してしまった。自分で調べればわかることだとは思うが、彼はとても親切に教えてくれたのである。やはり良いエンジニアというのは寛大なのであった。

ともかく以上が、シンボリックリンクとハードリンク、また、Windowsショートカットについての説明である。この記事が、私みたいな馬鹿なエンジニアに検索されて、UNIXファイルシステムについて基本的なことを学ぶ手がかりとなってくれると嬉しい。

(Wikipedia)
ソフトリンク
ハードリンク
(参考)
シンボリックリンクも維持して圧縮
ハードリンクでファイル削除ミスに備えよう
ハードリンクとシンボリックリンクを理解する


応援よろしくお願いします。




ラベル:記事一覧
posted by 良源 at 00:00| データベース | このブログの読者になる | 更新情報をチェックする

2014年08月06日

Active Directoryとは何ぞや

私は、会社で製造業向けの販売システムの開発・保守を行なっている。このシステムは基本的にクラサバのシステムで、各販売店の端末にクライアントソフトをインストールし、Active Directory(AD)を使って端末の権限を一元管理している。なぜこんなことをしているかというと、販売店側で比較的コンピュータに詳しい人間がいた場合、勝手にコンピュータの設定を変更し、思いもよらない動作を引き起こすことが考えられるからだ。

私は、この仕組みを概念的には理解していたが、今までADのことはよく理解していなかった。そのため、今日の記事は私の個人的な備忘録となっている。IT関連以外の人にはおそらく難しいと思うので、読み飛ばしてもらって構わない。

ADとは、簡単に説明すると、「コンピュータのユーザ属性やアクセス権限などの情報を一元管理する仕組み」である。ADでは、「ドメイン」という単位で管理する範囲を定義している。組織で1つのドメインを作成すれば、組織内のユーザ、コンピュータ、グループ、サービスなどを集中して管理することができるようになる。この時にドメインを集中管理するサーバを「ドメイン・コントローラ(DC)」と呼び、このサーバは非常に重要な役割を担う。DCの主な役割は、情報が登録されたDBの保持と、ドメイン参加時のユーザ認証である。大抵の場合、一つのDCは一つのドメインを管理し、例えば日本の拠点であれば、「jp.domain.local」、米国の拠点であれば、「us.domain.local」などといったドメイン名を使って管理する。

ADを使って端末を管理するようになると、端末側からはPC起動時に2種類のアカウントが選択できるようになる。一つはローカルユーザと、もう一つはドメインユーザである。これはその名の通り、ローカルユーザは端末そのものに登録されたユーザIDで、またドメインユーザはDCに登録されたユーザIDである。ローカルユーザで端末にログインすると、その端末のネットワーク環境で可能な範囲であれば、管理者権限も含めてどんな操作も実行可能であり、自宅のコンピュータと同様に自由に使用することができる。一方で、ドメインユーザで端末にログインすると、DCによって許可された範囲でアプリケーションやネットワークを利用することができ、冒頭のクライアントソフトなどをDCの許可を得て使用することができる。つまり、ドメインユーザでないと使用できない機能が存在するのである。多くの企業ネットワークでは、ドメインユーザとしてログインしない限り必要アプリケーションが利用できないようになっていることがほとんどである。そもそも、それがADの目的でもある。

私の会社ではつい最近、ADへの参加が強制的なルールとなった。それまでは、デフォルトであるWORKGROUPのままMyPCを利用しており、セキュリティの確保などはクライアント証明書VPN接続などを使って行なっていた。ADへ参加してみてわかったことだが、私の会社はIT企業なので、ADへの参加によって大きな機能制限は行われていないようだ。そもそも、開発や保守で管理者権限でいろいろなことを行なわなければならないため、DCによって端末に様々な制限をかければ社員たちは怒り出すだろう。

今でさえ、WindowsXPのサポート終了の件で、セキュリティ部門と現場がモメているのだから。

(参考)
Active Directory 【 AD 】 アクティブディレクトリ
Active Directoryとは何か?
PCでいうローカルユーザーとは、どういう意味なのでしょうか?どなたか教
社内ネットワークでのドメインについて。


応援よろしくお願いします。





ラベル:記事一覧
posted by 良源 at 00:00| データベース | このブログの読者になる | 更新情報をチェックする

2014年04月11日

ビッグデータとかHadoopとか

近年、「ビッグデータ」という単語がIT業界を中心に流行っているようだ。ビッグデータの概念は、従来のデータベースソフトで処理することが不可能なくらいの大量データを保管し、それらを分析してビジネスチャンスや新たな研究開発に活かすという考えである。

ビッグデータの流行に伴い、Hadoopというオープンソースソフトウェアも数年前から注目されていた。私は、Hadoopに関しては、単なる流行ですぐ終わるものかと思っていたが、ビッグデータに関するニュース記事がまだ巷に登場し続けていることをみると、Hadoopもまだまだ活躍の余地があるようだ。

そもそも、Hadoopとは何なのだろうか。Hadoopとは、ビッグデータを処理するための分散処理システムということらしい。つまり、別の言葉に言い換えると、「データマイニング」をするソフトと考えればいいだろう。Hadoopの特徴は、「分散処理システム」という言葉にもある通り、重い処理を複数のマシンに分散させて処理させることができるというところである。これがなぜ、Hadoopの特徴となっているかは、少々難しい説明となる。

普通、大規模システムでは、WEBサーバ、APサーバ、DBサーバの三層構造となっており、性能が出ない場合には、ボトルネックとなっているサーバをスケールアウトして(台数を増やして)対応する。しかし、ここで問題が起こる。複数のマシンに処理を分散させるには、プロセス同士の通信、監視、障害時の対応などを考えなければならず、プログラマにとってハードルが高いものである。しかし、Hadoopはそういった面倒な処理を一手に引き受けてくれ、プログラマは、やりたい処理だけに集中できるのである。

私は、それほどしっかりと調べていないが、おそらく、Hadoopのネットワーク構成においては、クライアントが処理を実行しようとすると、JobTrackerという仕事割り当て用サーバに命令が送られ、そのサーバが、複数あるTaskTrackerというサーバに実際に処理を依頼するような仕組みとなっているのだろう。(参考)

このHadoopの処理速度は、他の分散処理システムと比べて素晴らしいパフォーマンスを発揮するらしい。次のような事例がある。

【Hadoopの活用事例】
VISAは、クレジットカードのトランザクションの分析にHadoopを活用している。VISAでは、1秒間に8000件、毎日およそ2億件のトランザクションが発生しており、ここからカードの不正利用などのデータを短時間で効率的に検知しようと取り組んでいた。従来のリレーショナルデータベース(RDBMS)を使った分析では、サンプルとして抽出した過去2年間での730億トランザクション、約36TBのデータ分析を1ヵ月かけて行っていた。Hadoopを利用することで、このデータ分析が13分に短縮されたと報告している。

上記の事例では、クレジットカード情報の処理が、1か月(43,200分)かかっていたものが、たったの13分にまで短縮されたと!なんと1/3,323の時間短縮である。これが本当なら凄いことである。他の事例もこちらに載っているので、興味のある方は参考にしていただきたい。

実は、私の部署にもHadoopを取り入れたプロジェクトがあるのだが、そこではあまり大きなビジネスを獲得したという話は聞かない。内容はよく知らないし、聞いた限りでは、そのプロジェクトに会社が投入している資源(人・物・金)も大したことはないようである。これを聞くと、本当にHadoopが実用的かどうかは怪しいものだが。

ともかく今は、ビッグデータやらHadoopやら、ビジネスチャンスになりそうなワードがニュース記事に踊っているので、なるべく目を通してビジネスの変遷を追っていけるようにしておきたい。

(Wikipedia)
Apache Hadoop
(参考)
テキストマイニングで始める実践Hadoop活用
導入編〜Hadoopクラスタを構築するまで
Linux と Hadoop による分散コンピューティング
金融システムへの最新技術の適用 「大量データ分析処理技術『Hadoop』」(後篇)


応援よろしくお願いします。





ラベル:記事一覧
posted by 良源 at 00:00| データベース | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。