エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

npmまとめ

npmとは

Node.jsの管理するためのツール。
Node.jsには多種多様なモジュールが存在するため、管理ツールとして作られた。

覚えるべきコマンド−基本編

初期化

npm init

プロジェクトを初期化するためのコマンド。
依存関係や汎用的な基本情報をもったpackage.jsonを作成するために使う。

いちいち決めるのが面倒くさい場合は、コマンドオプションとして-yをつければ、枠だけ用意されているpackage.jsonが作成される。

npm init -y

パッケージのダウンロード

npm install {モジュール名}

Node.jsで公開されているモジュールをインストールする。
モジュール名を記載しない場合、コマンド実行したときのカレントディレクトリにあるpackage.jsonを元に、ライブラリをダウンロードする。
また、コマンドオプションとして、--save--save-devを使用すると、インストールしたモジュールがpackage.jsonに記述される。

インストールしたモジュールは、プロジェクト内でしか使えない。
しかし、Typescriptなどの汎用的なものをどこでも使えるようにしたい場合、-gオプションを付与して、グローバル環境にインストールすることもできる。 グローバル環境にインストールされると、パスが通るため、何処でもコマンド実行することができる。
しかし、多様は厳禁!
グローバル環境にインストールしすぎると、管理ができなくなり、意図しない問題が発生する可能性が高い。
プログラミングと同じく、公開範囲は最小限にしておくのがいい。

覚えるべきコマンド−応用編

Help

このコマンドがなんなのか忘れるときがある。
IT系は覚えることがたくさんあるので、思い出すための方法は必ず覚える必要がある。
全部は覚える必要はない。
npmの全てのオプションは、以下のコマンドで確認できる。

npm help

特定のコマンドを知りたい場合は、下記のコマンドで確認できる

npm help {コマンド}

例えば、installコマンドを確認したい場合、npm help installとすることで確認できる。

オートコンプリート

これも覚えることを減らすために必要になる。開発効率をあげるためにも必須。

npm completion >> ~/.bashrc
source ~/.bashrc

これをすると、コマンドの入力補完が効くようになる。
例えば、npm insでTABを押すと、npm installに補完される。

npmのバージョン管理

今のバージョン確認

npm -v

npmのアップデート

npm install -g npm

npmでnpmをインストールできるというのは、奇妙な話だができる。 npmを複数バージョン管理したい場合、nvmなどを使う必要があるが、今回の説明からは省略する。

npmのデフォルト設定

npm install -yで設定されるデフォル値などを設定することができる。

npm config set init.auther.name {名前}

パッケージの検索

npms

npms

プロジェクトをコミット頻度、カバレッジ、ドキュメント量などの複数の質でスコアのランク付けをしてくれる。

npm Discover

npm Discover · see what everyone else is using

パッケージと一緒に使われるパッケージを検索できる。

パッケージ管理

インストールしたものを確認する。

npm list

ただし、サブパッケージをすべて表示するため、情報過多で見たい情報が見れない時がある。
そんなときは、階層制限をかけてあげるといい。

npm list --depth=0

上記コマンドで、最上位階層のパッケージ内容だけ確認できる。

ホームページ

パッケージのドキュメントが見たい場合は、ヘルプを見てもいいが、より詳しい情報はホームページにあることが多い。
その場合は、下記のコマンドで見れる。

npm home {パッケージ}

Githumリポジトリ

npm repo {パッケージ}

ドキュメント参照

npm docs {パッケージ}

現在のバグ一覧

npm bugs {パッケージ}

パッケージの削除

個別で取り除く場合

npm uninstall {パッケージ}

全部取り除く場合

npm prune

依存パッケージのバージョン固定

デフォルト設定のnpmだと、npm install --saveでは、メジャーバージョンの番号が固定される。

マイナーバージョンを固定したい場合
npm config set save-exact true

もしくは、shrinkwrapを使う。

npm shrinkwrap

shrinkwrapを使った場合、カレントディレクトリにnpm-shrinkwrap.jsonファイルが生成される。
このファイルは、package.jsonがあるときにnpm installしても、npm-shrinkwrap.jsonの内容でインストールが行われる。

更新されたパッケージを見つける

npm outdated

パッケージの使えるバージョン確認

npm view {パッケージ} versions

Javaエンジニアだった人がTypescript開発でハマったこと

書くに至った経緯

Typescriptを使って2ヶ月。
ある程度経験を積んだから、感じたことを書き記す。

使っているTypescriptは、2.1.4

はまったこと・悩んだこと

Promise

非同期のためのもの。
説明を聞くとなんとなく納得してしまうが、実際使うと分からんってことが多かった。
Javaにも似たライブラリがあるようだが、使ったことはなかった。
自分でJavaで近いソースを書いて覚えられた。
要するに汎用的なスレッド処理をしてくれるものなんだね。
Nodeは、全体的に非同期のものが多いので、ここらへんはきちんと抑えておく必要があると感じた。
今後やり始める人は、要注意!

EventEmitter

Javaの開発歴が長いおかげで、GUIのイベント管理系の知識がまるでない。
経験が薄いため、どうすれば管理し易いか、可読性が上がるのかの知見がない。
ソースを追うのにかなり苦労中(現在進行形)

なるべくイベント名を、呼び出し・登録側で書かせないのがいいのではなかろうか?と頭の中で感じた。
イベント専用のリスナー一個にすべきか迷ったけど、まとめたらまとめたでカオス化しそうな気がする。
どう管理するか、まだ答えが出せていない。

enum

Javaとは違い、書く要素には数値が割り当てられる。
JavaでStateパターン、Strategyパターンをenumを使って楽に実現していたが、TypeScriptではできないケースが多い。
そこらへんにヤキモキした。

オブジェクトの割当をしたかった。

型定義ファイルとexport interface

違いがよくわからないんだよね。。。
現在進行形で。
どっちにしろ、コンパイル後はファイル出力されないんじゃ。。。って思う。
export interfaceは、コンパイルの手助けをするもので、型定義ファイルは、コンパイル後に存在するであろうファイルのために作るって認識でいる。
な・・・何を言ってるのかわからねーと思うが、俺も何を言っているのか分からねぇ・・・

クラスの情報が取れない

なぜクラスの情報が取れないんだろうか?
JavaのようにClassクラスのオブジェクトが欲しい時があったが、それができなくてヤキモキした。
Classクラスって、改めて字面にするとものすごく分かりにくい。

Typescriptを使って個人的に思うこと

Javaと似ているけど、ところどころ通じないところがある。
マイクロソフトの.NET系の流れが色濃く残っている感じがする。
enumなんかまさにそう。

あと、型は便利なこともあれば、ない方がいいときもあると感じた。
厳密でないほうが嬉しいこともたまにある。
ただ、any型は多用すべきではないなと感じる。
型がないところに型の定義を追加したのがTypescriptなんだから、型がない方向にもっていくのはナンセンス!

TypeScritpでハマったこと tsconfig.json

開発環境

  • VisualStudioCode
  • TypeScript 2.0
  • gulp

ハマったこと

ファイルを新規作成したが、既存のソースコードを読み込めず、なぜなのかかなり悩んだ。
ソースに問題はない。
きちんと正しいものを参照しようとしており、他のソースは参照できている。

原因

tsconfigに新規追加したファイルを含めていなかったため、ビルド時にコンパイル対象になっていなかった。
そのため、既存にあるファイルを参照しようにも、「お前だれだ?」状態で存在しないやつが迫害されていたという状況。

反省点

きっちりビルド内容を把握しましょう。
環境の問題は、ハマると解決に時間がかかるので、内容をきちんと押さえましょう。

【書評】ゼロ秒勉強術

ゼロ秒勉強術~最短で受かる! 世界一シンプルな試験合格法

ゼロ秒勉強術~最短で受かる! 世界一シンプルな試験合格法

きっかけ

今、情報処理技術者試験DBスペシャリストの試験勉強をしているが、もっと効率的で楽に合格できるような方法ないの?
助けて、ドラえも〜ん!っ的な感覚で本屋を回っていたときに目に入って来たので購入した。
ちなみにドラえもんは、大山のぶ代の声で再生。

決して、リゼロに影響されて、ゼロがつくものに目が行って衝動買しちゃった(ノω・)テヘって感じではない。
ちゃんと自分に必要だと思ったから買いましたよ。たぶん。。。

目次が胡散臭くなかったので、一回読んで見たくなった。

内容

目次

  • 序章 飛ばし読みこそが早く深い記憶・理解を可能にする
  • 1章 ゼロ秒解答
  • 2章 ゼロ秒解読(理論編)
  • 3章 ゼロ秒解読(実践編)
  • 4章 ゼロ秒試験
  • 5章 ゼロ秒勉強
  • 終章 「ゼロ秒勉強術」から「ゼロ秒仕事術」へ

まとめと感想

1章 ゼロ秒解答

ゼロ秒解答とは、すぐに分かる・思い出せる状態。
悩んだ結果の答えは、大抵間違っている。
身に覚えがある。

全てを悩まず答えるのは至難の業。
だから合格ラインに到達できるものをスラッと解答できるようにしておく。
上記をやる上で、過去問が超重要。
難易度の把握、傾向の対策を過去問から読み取る。

勉強する際は、教材を一つに絞る。
そうしないと点数が取れない。
理由は、下記のロジックに陥るから。

  1. 試験対策のために別の参考書を買う
  2. 問題範囲が広がる
  3. 質が落ちる
  4. ゼロ秒解答ができない
  5. 点数が取れない
  6. 参考書を買う(ループ)

範囲と質はトレードオフの関係にある。

2章 ゼロ秒解読(理論編)

ゼロ秒解読とは、止まらずに読むこと。
分からないところや、読む気がないところは、飛ばす。
全体を見たときに読み取れれば、問題ない。

全部を理解しないことで、脳の一時記憶領域に貯まる情報を減らして、効率的に処理する。
PCと処理形態は一緒。

3章 ゼロ秒解読(実践編)

ゼロ秒解読で重要なのは、繰り返すこと。
分かる/分からないを意識してやることが大事。

分かりたい欲求をコントロールすること。
なんでも今すぐやるとオーバーヒートする。もう限界だ!!状態になる。(ドラゴンボール劇場版のメタルクウラみたいになる)

やり方

  1. 目次で全体把握
  2. タイトル・見出しで読む箇所を選別
  3. 読む
  4. 文書構造を理解

実施後の後作業

読みやすくなるように編集する。
本に記入するようなことを勧めていたが、怖くてできないのが心情。
貧乏人の悪クセなのかな?
ものすごくやりたくない。
電子データ化してあれば、気兼ねなくできる。

4章 ゼロ秒試験

本を読んでも、大抵の人はわかったつもり・覚えたつもりであることが多い。
いざ説明するとボロが出る。

ゼロ秒試験は、自分の理解度を知るための仕組みで、思い出す作業をする。
何かしたら、思い出すことを習慣化する。
思い出せる=解答ができるので、解読とセットで実施すること。

林修も、全部即回答ではなく、記憶を辿ってそこから解を導くことが多い。
問題の解答コメントで、「どこかの本で読んだ記憶が〜」ってのが多い印象を受ける。

そういえば、子どもの頃、1時間宿題をしなさいって言われてた。
だけど、1時間も勉強したくないから、参考書の問題を高速で解いて、1時間分の課題をこなしたように見せていた記憶がある。
確か、算数だった。
20問の計算問題+文章問題2問を5分位で解いて、後はゲームするなどして遊んでいた。
今思えば、これがゼロ秒試験だったのかも知れない。

5章 ゼロ秒勉強

ゼロ秒勉強とは、勉強するまでにかかる時間をゼロにすること。
結構タイトル詐欺なので注意。

ゼロにするには、やる行動の明確化が大事。 事前のやる気は、勉強には必要ない。
やらないことの理由にしたいだけ。

勉強は、根性論でなんとかできるものではない。
仕組み作りが大切。
頑張るってのは、長続きせず、諦めたときの気休めくらいにはなる。

仕組み化する場合は、なるべく問題のハードルを下げること。
下げすぎてもダメ。
ゾーンに入るくらいの適度な難易度が一番いい。
「ゾーン」のことを「フロー」っていう輩がいるけど、俺は断固ゾーン派!
やっぱり黒子のバスケの影響がでかい。

太くて濃い大きな字を上手く利用する。
太くて濃い大きな字は、読みやすく、簡単だと思い込むため、物事を覚えるときは効果的。
この言葉を見て、男性器を思い出すヤツは、俺だけだろうか?

終章 「ゼロ秒勉強術」から「ゼロ秒仕事術」へ

勉強ができない人=自分を知らない人
メタ認識ができてない。
メタと言われると遊戯王を思い出す。
遊戯王でのメタの意味は、環境トップへの対策のこと。
ここでは、勉強できない箇所への対策って意味だったはず。 メタ認識して、弱点を減らすことが大切。

自信過剰はダメ。
全てにおいて、良い結果は生まれない。
日頃の鍛錬を怠ることが、一番悪影響が出る。
自信過剰で負けるパターンは、よく思いつく。
DIOとか吉良吉影とか。
負けたくなければ、自信過剰は捨てるべきだ。

全体を通して

気づかない内に、飛ばし読みすることが増えているなと、読みながら思った。
一番大切なのは、繰り返しすること。
繰り返しを多くやるために、ゼロ秒で行動を起こすことの重要性が説かれていると感じた。

ゼロ秒にとらわれて、目的を見失わないようにしないといけないなと思った。
目的を見失って行動したら、意識高い形だもんね。
意識高い形にだけは、死んでもなりたくないから気をつけないと。

ITエンジニアが飲んではいけない飲み物

きっかけ

ある飲料水を飲んだら、酷い自体に落ちた。
自分への戒めと他のエンジニアの助言のために書く

問題の商品

日清食品ピルクル

www.nissin.com

問題になった減少

飲んで数時間後、お腹の調子が。。。
数日便秘だったこともあり、強烈な便意が。。。
たぶん、下剤並みの威力があるんじゃないかな?

下記のサイトによると、カゼイ菌・ナトリウムが入っているらしい。

ピルクルの便秘への効果と飲み方について!

問題は、カゼイ菌のようだ。
通常の乳酸菌は、乳酸菌は胃酸や胆汁で死滅してしまうらしいが、カゼイ菌は耐性が強く死滅することがないらしい。
ゴキブリみたいな菌だな。。。
そして、生きたまま腸内に運ばれることによって、整腸効果、つまり排便作用が働く。

カゼイ菌については、下記サイトに詳しく書いてあるので、参考にしてみて。

L・ガゼイ菌の効果・効能

善玉菌として働いた際に、乳酸と酢酸が分泌され、便が押し出されるらしい。

飲んだ時間帯

これが最悪だった。
朝の出社前。
そして、便意が来たのが、出社時間の1時間あと。
知らない人が多いかもしれないが、東京のソフトウェア開発のビルのトイレって空いていることが少ない。
特に朝と昼は、開いているトイレは奇跡に近い。

おかげで、「お外の世界にこんにちは」思想な物体を必死に食い止めながら、いろんな階のトイレを探した。
開いているトイレを見つけた時は、昇天するような気持ちだった。

じゃ、どうすればいいんだってばよ?

トイレを確保した状態で飲む。これしかない!
トイレで飲むわけにも行かないので、なるべく家で飲んだほうがいい。
ただし、一人暮らしの人に限る。
たまに家族が入っていてダメな時があるからな。

得た教訓

  • 排便を促す時は家でやる
  • 便秘にならないようにする
  • 開いているトイレに入ったら神に感謝する
  • エンジニアはお腹が弱い
  • 朝・昼の排便は要注意

平成29年度データベーススペシャリスト対策まとめ

データモデル

概念データモデル

ユーザの要件定義に基づいて作成。
使用するDBMSに依存しない。
E-R図が該当する。

論理データモデル

概念データモデルを使用するDBMSの種類を前提に、再整理したデータモデル。
階層・ネットワーク・関係モデルが該当。

物理データモデル

DBMS固有のデータ構造や格納する型を前提に、詳細に定義したデータモデル。
テーブル定義表、インデックスなど。

ERD(ER図)

概念データモデルを表現する図形。
エンティティを表す四角形と、関係を表す矢印・直線を使用する。

インスタンス

エンティティの内容に沿った実データのこと

主キー

インスタンスを一意に識別できる属性の組み合わせ。
ERD上では、下線を引いて主キーを示す。
主キーが複数の属性からなる場合、複合キー・連結キーということがある。
主キーには下記の制約がある。

制約名 内容
一意性制約 エンティティ内に1つ(もしくは、1くみ)しか存在しない組み合わせであること。UNIQUE制約とも言う
非NULL制約 値がNULLではないこと(そのまんまやないかい!)

リレーションシップ

エンティティ間のインスタンスの数の対応関係のこと。

  • 1:1
  • 1:多(多:1)
  • 多:多

上記表現は、カーディナリティ、デグリー、多重度という。
なるべく1:1の関係になるように心がける。
また、それを目指して複雑なテーブル設計にならないようにする。 多:多は、必ず避ける。 なぜならば、未完成の設計に該当するため。
回答する場合は、多:多の関係を書いたら、必ず減点されるので注意

外部キー

あるエンティティの属性が、他のエンティティの主キーを参照する属性のこと。
エンティティでは、破線の下線で表現する。 主キーと外部キーの関係は、ほぼ1:多の関係になる。

連関エンティティ

多:多の関係にあるエンティティ間の間に存在するエンティティのこと。
お互いの主キーの組み合わせのエンティティになる。

スーパータイプとサブタイプ

汎化

複数のエンティティに共通する属性・属性値を、1つのエンティティにまとめること。

スーパータイプ

汎化した結果の共通項目のエンティティ。
スーパータイプとサブタイプの主キーは、ほぼ一致する。

サブタイプ

汎化した結果、残った属性のエンティティ

排他的サブタイプ

スーパータイプのインスタンスができたとき、複数あるサブタイプのエンティティのうち、どれか1つだけインスタンスが生成される関係のこと。 スーパータイプに、サブタイプを区別する属性を持つことが一般的。
ほとんどのサブタイプは、排他的サブタイプに該当する。

共存的サブタイプ

スーパータイプのインスタンスができたとき、全サブタイプのインスタンスが生成される可能性がある関係のこと。
スーパータイプにサブタイプの数だけ区分を持つ必要がある。

関係データモデル

関係モデル

行・列の2次元表のデータ構造で表記。

候補キー

データを一意に特定できる極小な属性群のこと。
NULLも許容する。

主キー

候補キーの中から選ぶ。
非NULLでなければならない。

非キー属性

候補キー以外のキー

代理キー

候補キーで、主キーの以外の属性のこと。

関数従属性

ある属性が決まると、他の属性も一意に決まる性質をもつ属性のこと。
1つの関係をもつX,Y間で、Xの属性が決まるとYも決まるとき、YはXに関数従属するという。
Xは、決定項。Yは、非決定項という。
決定項と非決定項は、多:1の関係になる。

正規化

データベースから冗長性を排除すること。

正規化用語

完全関数従属性

非キー属性が、候補キーを構成する全ての属性に関数従属している。
候補キーの属性が1つのみの場合は、他の属性は全て完全関数従属している。
候補キーの属性が2つ以上の場合、全て決まると値がきまる属性を完全関数従属しているという。

部分関数従属

候補キーの属性が2つ以上の場合で、候補キーの一部が決まると、データが一意になること。

推移的従属性

ある属性が決まると非キー属性の属性がきまり、さらにその非キー属性が別の非キー属性と一意になっている関係。

非正規系

1レコード内に、項目が複数ある属性が存在する状態。

第1正規系

繰り返し項目がない状態

第2正規形

非キー属性が、完全関数従属している状態にしなければいけない。
※非キー属性が部分関数従属していないこと。
部分関数従属の属性は、別テーブルに分ける。

第3正規形

非キー属性間で、推移的従属性が存在しないこと。

第4正規形

候補キーと非キー属性に多値従属性がない関係。

多値従属性

決定稿が決まると、複数の非決定項が決まること。

各正規化の判断基準

正規化 根拠
第1正規形 属性値に繰り返しがない
第2正規形 属性に繰り返しがなく、非キーがいずれも候補キーに対して完全従属している
第3正規形 属性に繰り返しがなく、非キーがいずれも候補キーに対して完全従属しており、候補キーと非キーに推移関数従属性がない

非正規化の問題点

DB更新時に異常が発生する

更新種類 問題内容
挿入 事前登録できない。もしくは、重複登録しなければいけない。
更新 重複更新しなければいけない。
削除 最後の行を削除すると、関係が失われる

関係代数

データの関係を定義する演算式。
下記の種類がある。

  • 集合演算
    • 直積
  • 関係演算
    • 射影
    • 選択
    • 結合

SQL

DB定義・操作を実行するために使用される言語。

データ定義

  • CREATE SCHEMA
    スキーマ作成
  • CREATE TABLE
    テーブル作成
  • CREATE VIEW
    ビュー作成
  • CREATE ROLLE
    権限作成
  • ALTER
    スキーマ・テーブル・ビュー定義の変更
  • DROP
    スキーマ・テーブル・ビューの削除
  • GRANT
    アクセス権限付与
  • REVOKE
    アクセス権限削除

データ操作

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

SELECT

基本文法

SELECT 属性
FROM 表明
WHERE 条件
GROUP BY グループ化項目
HAVING グループ化後の抽出条件
ORDER BY ソート条件

属性に対する操作

DISTINCT

重複した行をまとめる

集合関数

  • MAX
  • MIN
  • AVG
  • SUM
  • COUNT

演算子の優先順位

優先順位 演算子
1 *, /
2 +, -
3 =, <>, <, >, <=, >=
4 IS NULL, IS NOT, LIKE, IN, BETWEEN
5 NOT
6 AND
7 OR

()をつければ、優先されて計算される。

特殊な操作

UNION

UNION, UNION ALL で和演算ができる。
UNION ALLで重複した行をまとめられる。

INTERSECT

積演算

EXCEPT

差演算

INSERT, UPDATE, DELETE

INSERTの基本文法

INSERT INTO テーブル名 (属性)
VALUES(値)

UPDATEの基本文法

UPDATE テーブル名
SET 列名 = 値, 列名 = 値
WHERE 条件

DELETEの基本文法

DELETE FROM テーブル
WHERE 条件

DDL

CREATE TABLE

CREATE TABLE テーブル名(
    列名 データ型 列制約,
    列名 データ型 列制約
    )

外部キーの更新・削除規則

動作 概要
NO ACTION 主キー側の行を削除・更新するとき、外部キー側に同じ値があれば、主キー側の更新・削除が拒否される。
CASCADE 主キー側が更新・削除される場合、外部キー側の同一値の値が更新・削除される。
SET DEFUALT 主キー側を削除するとき、外部キー側をデフォルト値に変える。
SET NULL 主キー側を削除するとき、外部キー側をNULLに設定する。

DBMS関連

トランザクション

トランザクション処理

データベースの更新・削除・参照などの複数の処理を1つにまとめること。

ACID特性

  • Atoromicity:原子性
    処理された/されてないのどちらかになること。
  • Consistency:一貫性
    データベースの状態が一貫していること。
  • Isolation:隔離性
    トランザクションの並列処理ができること。
  • Durability:耐久性
    トランザクション終了後、その後の障害に影響されずにデータを保持できること。

隔離性を満たさない現象

ロストアップデート

更新したはずのデータが更新される前に戻ってしまい、更新内容が消失する現象。

ダーティリード

ロールバック前のデータを読み取って、誤読してしまう現象。

ノンリピータブルリード

トランザクションが2回同じデータを読み取った時、別々の値を読み込んでしまう現象。

ファントムリード

トランザクションが2回以上、同一範囲のデータを読み取った時、最初の1回目はなかったデータを2回めで読み取ってしまうこと。

隔離性水準

トランザクションが別トランザクションが受ける影響の許容度。
下記種類が存在する。

隔離性水準 ダーティリード ノンリピータブルリード ファントムリード
Read Uncommitted あり あり あり
Read Committed なし あり あり
Repeatable Read なし なし あり
Serializable なし なし なし

排他制御

楽観法

書き込み時に更新の有無をチェックする。
ロックをしない。

時刻印法

時刻印を保持し、他のトランザクションと競合して内科を判定する。
ロックしてない。

ロック法

一定の制約があるロックを掛けて、更新を行う。
ロックする範囲を、行・ページ・テーブル・データベースから選べる。

ロックには、共有ロックと専有ロックがある。

デッドロック

トランザクションが互いに共有資源をロックし、ロック解除を待って処理が進まなくなる状態

防止

決められた順序に従って更新をさせる。

検知

2相ロック

更新時にロックを掛け、ロックを開放する際は、すべてのロックを開放する。
デッドロックは防げない。

障害回復機能

ログファイル

障害回復の準備として、ログファイルを出力する。
ログファイルが消失すると、復旧ができなくなる。
※試験は、ログファイルを消失しない暗黙のルールがある。

ログファイルは、更新前後に書き込まれる。
出力されるタイミングは、以下の通り。

操作 更新前ログ更新後ログ
データ挿入 なし | あり
データ更新 あり | あり
データ削除 あり | なし

WAL

ログは、更新前後ともにデータベースの更新より先に出力される方式。
理由は、ログファイルがデータベース更新後に出力できないと、復旧できなくなる可能性があるため。
それを回避するために、最初に出力する。

ロールバック

後退復旧。
障害が発生した時点から、更新前ログを使って、指定された時点に復旧する。

ロールフォワード

前進復旧。
バックアップからコピーされたテーブルに対し、更新後ログを使って、指定された時点に復旧する。

トランザクション障害

更新前ログを使って、後退復旧。

媒体障害

バックアップ・リストア、更新後ログでロールフォワード。

システム障害

電源断、OS障害、DBMS障害などでDBMSが動作しなくなった状態。
DBMSが停止するので、ログが出力されない。

分散データベース

遠隔地にあるデータベースをネットワークを使って連携させる。

透過性

名称 説明
アクセス透過性 同一法歩でアクセス
位置透過性 物理的な配置場所を意識しなくていい
移動透過性 格納サイトが変更されても影響がない
分割透過性 1つのデータが複数サイトに分割されても意識しなくていい
重複透過性 1つのデータが複数サイトで重複格納されても意識しなくていい
規模透過性 OSやアプリの影響を受けない
並行透過性 同時並行でデータベースの操作が行える

テーブル結合法

  • セミジョイン
    結合処理はサイトごと
  • 入れ子ループ法
    データを1行づつ送信
  • マージジョイン法(ソートマージ法)
    データを全行送信

表領域

物理的な格納領域

牽引

  • ユニーク牽引
    検索キーに該当するのは1行だけ
  • 非ユニーク牽引 検索キーに該当するのは複数行
  • クラスタ牽引
    検索キー順番と、検索キーに該当する行の物理的な並び順が一致
  • クラスタ牽引
    検索キー順番と、検索キーに該当する行の物理的な並び順が一致しない

午後問の解法テク

主キー・外部キーを見つける

問題に出てくるスキーマは未完成の状態。
そのため、関係名や属性名を見ながら主キー・外部キーのあたりをつけて、問題を読み進めながら特定する。

主キーになりそうな項目は、「〜番号」「〜コード」「〜区分」「〜ID」とかが多い。
この項目名が出てきたら、要注意。 また、主キーは一番最初に列挙されることが多い。
一番左に該当する項目は、要注意して確認すること。

問題文中に、「一意な」「識別される」の文言がある場合は、主キー確定。

多重度を見極める

多重度が曖昧に表現されていることが多い。
不明な場合は、多対多、1対多を想定して考える。

スーパータイプ・サブタイプに注目しておくこと。
区分、フラグが該当する事が多い。

隔離性水準の覚え方

分離レベル ダーティリード ノンリピータブルリード ファントムリード
Read Uncommitted
Read Committed
Repeatable Read
Serializable

◯:発生する
✕:発生しない

ダノフはシリコン
ダ:ダーティリード ノ:ノンリピータブルリード フ:ファントムリード (は) シ:serializable リ:repeatable read コ:read committed ン:read uncomitted

配置順序さえ間違えなければ、これで完璧!
あとは、わかりやすい○の配置なので、覚えられるハズ。

その他参考サイト

データベース研究室 – DATABASE LABO

データベーススペシャリストドットコム

情報処理試験まとめ/データベーススペシャリスト試験の勉強法まとめ - まとめwiki - アットウィキ

Firefox51 アップデート機能内容まとめ

提供開始日

2017 年 1 月 24 日

更新内容

公式サイト

詳しくは、公式サイト見たほうが正確

Firefox 51 for developers - Mozilla | MDN

使うだけの人は、リリースノート見たほうが分かりやすい。
※自分はこっち側なので、こっちの情報をまとめる

Firefox 51.0 リリースノート

目立った変更内容

  • パスワード保存ダイアログで保存前のパスワードを確認
  • URL バーにズームボタンが追加
  • GPU が搭載されていない環境での動画再生性能が向上
  • “submit” イベントが発生しない場面でも、パスワードを保存できる
  • 安全でない接続のログインページに対して警告を表示
  • FLAC (Free Lossless Audio Codec) の再生に対応
  • E10s の高速化

他にもあるけど、使う側で目につくのはこんなところか?
以下、気になった機能の感想と補足

URL バーにズームボタンが追加

100%以外の倍率にすると、アドレスバーに倍率が表示される。
そして、表示された倍率をクリックすると、100%に戻る。
今までは倍率がすぐにわからなかったため、変更したのか確認するのに手間がかかったが、簡単にできるようになった。

“submit” イベントが発生しない場面でも、パスワードを保存できる

毎回パスワード保存できる画面とできない画面があるのはなんで?って思っていたが、submitイベントをトリガーにしていたのか。。。。
初めて知った。
しかし、今回のバージョン対応されるから、知ったところで意味は薄い。
利便性は良くなりそう。

E10s の高速化

まだ、俺のブラウザはe10sに対応してないから、意味はないんだけどね。
確認の方法は、過去記事参照

suzaku-tec.hatenadiary.jp

対応されるまで待つしかないか。