よしたく blog

ほぼ週刊で記事を書いています

じぶん Release Notes 0.30.04

8月1日〜31日の間の出来事がリリースされました。

8月の感想

仕事のストレスや今後の不安から何も手につかなくなってしまう日々がありました。結果的に心と体、どちらも壊したわけではないので大丈夫ですが、常日頃から無理しないほうが良さそうです。相談させていただいた方には感謝しています。本当に助かりました。自分の弱いところを見せるのが下手なので改善していきたいです。こんな状況でもブログは続けた自分を褒めてあげたい。

技術・開発関連

  • 特にありません

イベント

  • 特にありません

読んだ本

  • Python実践データ分析100本ノック

ブログ

リリースノートを除き、次のエントリを書きました。

yoshitaku-jp.hatenablog.com

yoshitaku-jp.hatenablog.com

yoshitaku-jp.hatenablog.com

PV数

3464でした。 お盆休みの期間はやはり下がりますね。

8月の目標結果

  • 交互浴で整う
  • サウナに行く
    • 友達のタダさんが声をかけてくれて行けました。とてもリラックスできました。サウナにハマりそうです。
  • Python100本ノック終わらせる
    • 無事に達成しました。ブログも書きましたが、非常にいい本でした!おすすめ。
  • 夏の思い出を作る
    • 春先は外出自粛で何も思い出が作れなかったので、夏は思い出つくりに奔走しました。
    • 結果的に高尾山の登山と、南房総の方へ開発合宿へ行き、最高の夏となりました。

リモートワークの不安から開放されよう / はじめての認知療法を読んだ

エンジニアの多くは3,4月からリモートワークを開始した人も多いはずだが、気がつけば8月ですでに半年が経過している。多くの人が共感すると思うが自分としては、在宅の慣れない作業環境やメンバーとのコミュニケーションの取り方だったり、私生活でも思ったようにストレス発散ができていない気がする。そんな中、塵も積もれば山となる状況でストレスにやられてしまってか、誰かの何気ない発言やSNSでの発言が自分にとってとても刺さるものになっていってしまった。

自分はあまりネガティブになることが少なく普段からポジティブに過ごせていると思っていたが、心にダメージは蓄積されていたようだ。そんなタイミングでてぃーびーさんが気になる記事を上げていたので読んだ。それが認知療法に関するエントリーだった。

tbpgr.hatenablog.com

簡潔にまとまっていて今の自分に「認知療法」が必要だということがわかった。すぐにてぃーびーさんに連絡を取り、読みやすい本を紹介してもらった。それが「はじめての認知療法」だった。

はじめての認知療法 (講談社現代新書)

目次

この本は次の目次から構成されている。

  • 第1章 気持ちを切り替えるために―認知療法を理解する
  • 第2章 まず行動を少しだけ変えてみよう
  • 第3章 問題を解決する手順
  • 第4章 身体とこころをリラックスさせる方法
  • 第5章 自分の気持ちを伝えるには
  • 第6章 コラム法のすすめ
  • 第7章 「後ろ向きスキーマ」に気づくために

本のよかったところ

認知療法」という4つの漢字が並んでいるだけで医療系の難しそうな印象を受けるが、内容や表現は簡単に書かれており、読んでいて常に寄り添ってくれるような印象を受けた。ストレスで考え方が偏ってしまっている人に対して、矯正していくのではなく、優しくマッサージして心を解していってくれる感じを自分は受けた。本自体が、自分はKindleで購入したが、新書なのでボリュームもなくとても楽に読めるし、値段も1000円以下でお財布にも優しいので、これだけの投資で心が軽くなるならぜひ読んでみてほしい。

本の中で言われていること

この本では「自動思考」に気づこうということが再三言われていた。この「自動思考」というものは、気持ちが動揺したときに瞬間的に浮かんでいる考えやイメージと定義されていた。ストレスが常に掛かって不安に襲われているときは、この瞬間的に浮かんでくるイメージがマイナスの要素が強いものになることが多い。このマイナス思考になってしまうのをやめるために、気持ちが動揺したときにおこなわれていたことをしっかりと見つめ、「果たしてマイナス思考に振れてしまうような出来事だったのか」を再確認する。また、このマイナス方向に振れてしまっている癖、この本の中では「スキーマ」という単語で語られているが、それに自分自身で気がつき目を向けられるようにしていった。

他にも自分自身の認知のゆがみを認識して気持ちを楽にしていくとともに、実際に起きてしまっている問題を解決する手順や、身体と心をリラックスさせる方法が書かれている。

まとめ

自分はポジティブ思考の人間だが、やはり今のような世の中になるなんて一瞬も考えたことがなかったし、「まぁすぐに慣れて、いつもどおりの生活が送れるだろう」と楽観的に考えていた。しかし、気づかないうちにスレトスがかかっていたようだ。自分は幸いにも、友人に不安を打ち明けて話を聞いて貰える機会を多く持てた。少し上向きになったところで、この本にも出会え9月の1週目は穏やかに過ごすことができた。身体もそうだが、心もダメージを負いすぎると取り返しがつかなくなってしまうので、気をつけていきたい。今少しでも不安を抱えている人がいたら、自分が潰れる前に本を手にとって読んでみてほしい。今何人かにこの本をおすすめしてみているが読み始めた人からはいい評価をもらえている。また、話せる友人がいれば飲みに行ったり、オンラインで話してみたりをしてほしい。自分でも良ければ悩みがあればいつでも聞きます。

bookmeter.com

手を動かすはじめの一歩に最適 / Python実践データ分析100本ノックを読了した

去年からデータ分析に関係する勉強を始めている。理論的なことと実践での動きについて学ぶことができているが、なかなか手を動かすことができていなかった。知識ばかりが先行し頭でっかちになってしまっていた自分は手を動かして学ぶ事ができるものを探していて、今回は紹介してもらった「Python実践データ分析100本ノック」を実践した。今回はこの本の感想を書きたい。

Python実践データ分析100本ノック | 下山 輝昌, 松田 雄馬, 三木 孝行 |本 | 通販 | Amazon

Python実践データ分析100本ノックとは

Python実践データ分析100本ノック」は、Pythonを使ったデータ分析を実戦形式で学べる本で、タイトル通り100個分の課題がある。章は10で分かれていて、各10個ずつの問題が入っている。章の流れも、最初はデータを確認したり整形したりといった簡単なものから最後は画像分析や自然言語まで幅広く扱われている。大きくデータ分析の流れが知りたかった自分としては内容が合っていたが、画像分析や最適化問題といった特定の分野のデータ分析を詳しく知りたい人にとっては少し物足りない内容になると思う。

また、サンプルデータとサンプルコードもしっかり用意されているので、時間がない人は本を読みながらコードを流していくだけでも勉強になると思う。自分は写経しながら読んでいった。

目次

  • 第1部 基礎編 データ加工
    • 第1章 ウェブからの注文数を分析する10本ノック
    • 第2章 小売店のデータでデータ加工を行う10本ノック
  • 第2部 実践編① 機械学習
    • 第3章 顧客の全体像を把握する10本ノック
    • 第4章 顧客の行動を予測する10本ノック
    • 第5章 顧客の退会を予測する10本ノック
  • 第3部 実践編② 最適化問題
    • 第6章 物流の最適ルートをコンサルティングする10本ノック
    • 第7章 ロジスティクス・ネットワークの最適設計を行う10本ノック
    • 第8章数値シミュレーションで消費者行動を予測する10本ノック
  • 第4部 発展編 画像処理/言語処理
    • 第9章 潜在顧客を把握するための画像認識10本ノック
    • 第10章 アンケート分析を行うための自然言語処理10本ノック

購入前の注意点

1点注意が必要な部分があり、この本はデータ分析の実践向けの内容に絞っているこので、Pythonを始めJupyter Notebook、各種ライブラリをインストールする手順は割愛されている。このあたり、自分で環境がセットアップできるレベルの人で無いと本書は活用できず無駄になってしまう。自分はGoogle Colaboratoryを使って実践していったが、画像の分析以外は特段問題なく実行ができた。画像の分析は、自分が現在取り組みたいものではなかったので詰まって以降は本文を読むだけになり問題解消までは動いていない。

良かった点

データの内容確認を毎回おこなっている

各章の最初に必ずデータを読み込む処理をおこなっているが、そこでしっかりデータを確認しているのが良かった。 各章なので100本中10回おこなうことになり、途中で少し冗長なのでは?と疑問にもなったが、「データ分析をおこなう上でデータがどうなっているか最初に確認することが大切」というメッセージを最終的には感じた。

細かい技術の話をしていない

これはメリットでもあり、デメリットでもあるのだが、自分としてはメリットだと思ったのでこちらに寄せた。 冒頭にも書いたが、自分は用語の意味や技術的な話は頭に入っていて、それらを実践で使うには…という具体例がほしい段階だった。 そういう背景もあり、本を読んでいる中で技術的な説明が詳細に書かれているよりかは実践的な話を多く見聞きしたかったので、省かれていた面は嬉しかった。

欲しかった点

本書からのステップアップ

この本は、実践としてデータ分析していく流れを取り扱い、初学者が迷ったときに戻ってくる本という位置づけを感じている。 なので、この本を読み終わった後の次のステップをかいてあるともっと良かったと感じた。 例えば、この章の内容はKaggleのこの問題とマッチしているので取り組みやすいとか、この分野を深堀りしていきたければこの本が良いといった内容だ。

まとめ

Python実践データ分析100本ノックを読了した。 発展編を除いたとしても80本を4週間でおこなえば十分余裕を持っておこなえると思う。 データ分析をしたいが、何をしたら良いかわからない人にはおすすめの1冊と言える。

www.amazon.co.jp

Google Colaboratory で Google Drive に読み書きする

Google Colaboratoryで保存してあるファイルからデータを読み取ったり、計算した結果をファイルとして書き込んだりしたいタイミングがあった。今回はGoogle繋がりと無料で使える保存場所としてGoogle Driveを選択し、Google Colaboratoryでマウントしてから、ファイルを読み書きする方法を試す。

マウントと読み込み

まずはGoogle DriveGoogle Colaboratoryから使えるようにマウントする。 マウントの仕方は2種類あり、コードから実行する方法とブラウザからGUIでおこなう方法がある。

コードで実行する

まずはコードで実行する。

これだけでマウントが完了する。

from google.colab import drive
drive.mount('/content/drive')

今回は前回からの続きで、100本ノックのファイルをGoogle Driveに配置して、それを読み込んでいる。 ここはpandasで使えるpd.read_csv()を使ってCSVファイルを読み込んでいる。 Google Drive内の配置場所もキャプチャ画像として載せているので参考にしてください。

folder_name_1 = '/content/drive/My Drive/Colab Notebooks/100/1/'
customer_master = pd.read_csv(folder_name_1 + 'customer_master.csv') 
customer_master.head()

f:id:yoshitaku_jp:20200823133435p:plain

ブラウザからGUIで実行する

1 Google Colaboratoryの画面を表示する。左側のフォルダボタンをクリックする。

f:id:yoshitaku_jp:20200823140139p:plain

2 フォルダボタンをクリックすると少し広がる。その中からフォルダアイコンにGoogle Driveが重なっているものをクリックする。

f:id:yoshitaku_jp:20200823140211p:plain

3 クリックすると、アクセス許可を求められるので「Google ドライブに接続」をクリックする。その後、どのアカウントのGoogle Driveを連携するのかも止められるので選択する。

f:id:yoshitaku_jp:20200823140238p:plain

4 無事に連携ができると、drive/My DriveGoogle Driveが連携できていることが確認できる。

f:id:yoshitaku_jp:20200823141351p:plain

書き込み

読み込みの作業はPythonのコードで普通におこなえてGoogle Colaboratoryに依存していなかった。実は書き込みもマウントされていれば特に依存せずおこなえる。 せっかくなのでさきほど読み込んだコードを元に、その内容を別のディレクトリに保存してみる。

import pandas as pd 
folder_name_1 = '/content/drive/My Drive/Colab Notebooks/100/1/'
customer_master = pd.read_csv('/content/drive/My Drive/Colab Notebooks/100/1/customer_master.csv') 
customer_master.to_csv('/content/drive/My Drive/Colab Notebooks/100/tmp/customer_master.csv')

読み込んだときと同じpandasのメソッドであるpd.to_csv() で保存をおこなってみる。

f:id:yoshitaku_jp:20200823151247p:plain

無事に保存されている。

Google Colaboratoryで Sparkを使うための準備

Python実践データ分析100本ノック | 下山 輝昌, 松田 雄馬, 三木 孝行 |本 | 通販 | Amazonを実践していて、環境構築なしにJupyterNotebookと同じ環境が使えるのでGoogle Colaboratoryを使う機会が増えています。 100本ノックでSparkを使うことはないと思っていますが、いずれSparkも使ってみたいと思うのでGoogle ColaboratoryでSparkを使えるように設定してみました。

インストール

今回はSpark3.0とJDK11で実施してみます。

Google Colaboratoryでは「!」をコマンドの先頭につけるとLinuxコマンドを使うことができます。apt-getを使って「JDK 11」をインストールします。次にSpark3.0をダウンロードして、解凍します。最後に、システムの中でSparkを見つけるために「findspark」もインストールします。

!apt-get upgrade
!apt-get update
!apt-get install openjdk-11-jdk -qq > /dev/null
!wget -q http://ftp.meisei-u.ac.jp/mirror/apache/dist/spark/spark-3.0.0/spark-3.0.0-bin-hadoop2.7.tgz
!tar xvf spark-*
!pip install -q findspark

環境変数の設定

Google Colaboratory上でPysparkを使うために環境変数に設定します。 JDKとSparkの場所を教えてあげます。

import os
os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-11-openjdk-amd64"
os.environ["SPARK_HOME"] = "/content/spark-3.0.0-bin-hadoop2.7"

実行する

import をおこない実行してみます。 出力内容も確認します。

import findspark
findspark.init()

import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate() 
spark
SparkSession - in-memory
SparkContext
Spark UI
Version
    v3.0.0
Master
    local[*]
AppName
    pyspark-shell

じぶん Release Notes 0.30.03

7月1日〜31日の間の出来事がリリースされました。

7月の感想

7月は自分の思い通りに行かない日々でした。 目標もOKRを立てたは良いものの、とても学びのあるインプットと深い内容のアウトプットできたと思えてません。やはり業務外で時間をとってやるのはなかなか難しいですね。業務内容に絡めたものが出したい...一回ブログを休むか、仕事を変えるか... モチベーション的にも現時点でうまくいってない1番の理由は仕事で、プログラムやらシステム組んで書いてもっとエンジニアリングがしたいなぁと言う感じです。逆に今やっていることが向いていないことがわかってよかったです。次を考える際の軸にします。

技術・開発関連

  • 特にありません

イベント

  • 特にありません

読んだ本

-特にありません

ブログ

リリースノートを除き、次のエントリを書きました。 (編集中)

PV数

7月は3813でした。

7月の目標結果

  • O: 「趣味ブログ」は今後進みたい「サッカー分野」で認知される
    • KR: 趣味ブログの読者数を10人にする
    • KR: 趣味ブログのPVを月100にする
    • KR: 趣味ブログの週1記事上げる

週一で記事を出すことはできました。 他は未達ですが、今後どうしたら良いか練っていきます。まずは書くための自分なりのフレームワークを作りたいです。

  • O: 「Python/Vue.js/Azure」はこの分野の人って認知される
    • KR: Python/Vue.js/Azureの3分野だけで月100PV取る
    • KR: Python/Vue.js/Azureのどれかに関する記事を週1で上げる

こちらも週一で記事を上げれましたが、良い内容だとは思えないし、どう改善すれば良いか袋小路です。引き続き目標としては設定しておきます。

  • CEMのサイト修正 こちらは未着手でした。

【Python】str()とrepr()の違い

ずっと疑問に思っていたPythonにおけるstr()とrepr()の違いについてまとめた。

共通していること

タイトルに「違い」と書き始めたが、まずはこの2つについて共通していることを簡単に書いておく。 この2つの関数について同じことはオブジェクトの中身を出力する関数であるということだ。更にこの2つはPythonの組み込み関数として用意されていて、すぐに使うことができる。

何が違うか

出力する部分が同じであると書いたが、それ以上細分化する部分と必要性はあるのか疑問に思った。Pythonの公式ドキュメントを眺めてみると、repr()には「公式の (official)」、str()は「非公式の (informal)」という文章が書いてある。

repr() 組み込み関数によって呼び出され、オブジェクトを表す「公式の (official)」文字列を計算します。可能なら、これは (適切な環境が与えられれば) 同じ値のオブジェクトを再生成するのに使える、有効な Python 式のようなものであるべきです。

https://docs.python.org/ja/3/reference/datamodel.html#object.__repr__

オブジェクトの「非公式の (informal)」あるいは表示に適した文字列表現を計算するために、 str(object) と組み込み関数 format(), print() によって呼ばれます。戻り値は string オブジェクトでなければなりません。

https://docs.python.org/ja/3/reference/datamodel.html#object.__str__

この公式と非公式の表現が詳細に書かれていないので、余計混乱する形になった。他の人がどう解釈しているかが気になったので、インターネットで検索したところ「エンドユーザにとって読みやすいか読みやすくないか」と書かれていたのが一番しっくり来た。しかし、Pythonの公式ドキュメントに書かれている事実と、これを読む人は開発者であることを考えると、「エンジニアが開発しているときにデバッグとしてわかりやすいものかわかりにくいものか」と解釈するのが正しいように思う。これは開発者から見るか、利用者から見るかの違いなので大筋では同じことを言っているし、「エンドユーザからみて読みやすいか読みにくいか」を否定するものではない。

どう使われているか

実際にどう使われているかを見ていくと、「エンジニアが開発しているときにデバッグとしてわかりやすいものかわかりにくいものか」がしっくり来ると思う。str()とrepr()の違いについて調べると、よく出てくるサンプルコードをGoogle colab上で実行したものだ。strだと単純に時刻表示だけだが、reprだとどのクラスを使っているかとか詳細な情報が出てくる。これを見ると「エンジニアが開発しているときにデバッグとしてわかりやすいものかわかりにくいものか」がある意味では正しい表現であるんじゃないかと思えてくる。

import datetime
now = datetime.datetime.now()

str(now)
2020-07-31 12:37:54.850396

repr(now)
datetime.datetime(2020, 7, 31, 12, 37, 54, 850396)

now
datetime.datetime(2020, 7, 31, 12, 37, 54, 850396)

また、nowの変数だけ入力した際にデバッグが表示されるのもインタラクティブに開発が行えるPythonの強みが出ていると思う。逆に言えば、.pyファイルで実行した際はreprの変数だけでコードを書いたときに実行されないので、そういったときのためにstrが用意されているのかなと考えた。

【Pandas】df.head と df.head()の違い

サンプルコードを写経していたら、df.head()と打たなければいけないところを、df.headで実行してしまった。それでも実行はできて中身の出力はできたのだけれど、出力内容は違うものが出てきたのでこの2つについて簡単に調べた。表示されているデータは機械学習で有名なタイタニックのデータを出力した。

df.head()はメソッド

df.head()はメソッドです。引数に数値を入れることで、その数の行数分出力できる。 デフォルト引数も5が設定されているので、引数を設定しなくてもそのまま動く。

f:id:yoshitaku_jp:20200726103521p:plain

github.com

df.headはreprが出力

df.head すると10行のデータと詳細な情報が多く出てきた。 タイトルに結論が書いてあるが、これはreprの情報が出ている。 reprはrepresentationの略で表現という意味になる。 df.headを実行しているが、本当はreprの情報が出ているためにデフォルトで5行という制限もなく、様々な情報が出力されている。

f:id:yoshitaku_jp:20200726103417p:plain

【Python】デフォルト引数にリストを使うときの注意点

自分が知らなかったのでメモ

関数のデフォルト引数にリストを設定した時、デフォルト引数のリストの内容は再度実行したタイミングでも前の内容を保持します。

def sample(a, b=[]):
  b.append(a)
  return b

print(sample('test'))

['test']

print(sample('test'))

['test', 'test']

公式ドキュメントを読む

公式ドキュメントを当たると、次のように書いてあります。

デフォルト引数値は関数定義が実行されるときに左から右へ評価されます。 これは、デフォルト引数の式は関数が定義されるときにただ一度だけ評価され、同じ "計算済みの" 値が呼び出しのたびに使用されることを意味します。この仕様を理解しておくことは特に、デフォルト引数値がリストや辞書のようなミュータブルなオブジェクトであるときに重要です: 関数がこのオブジェクトを変更 (例えばリストに要素を追加) すると、このデフォルト値が変更の影響を受けてしまします。一般には、これは意図しない動作です。このような動作を避けるには、デフォルト値として None を使い、この値を関数本体の中で明示的にテストします。例えば以下のようにします:

def whats_on_the_telly(penguin=None):
    if penguin is None:
        penguin = []
    penguin.append("property of the zoo")
    return penguin

ミュータブルなオブジェクトを使う時に注意しなければいけないので、辞書も気をつけなければいけない対象です。 デフォルト値にNoneを使うことでも、この問題を回避できることが書いていました。

デフォルト引数を使うタイミング

そもそもデフォルト引数を使うタイミングがあまり想像できなかったので周りのエンジニアに聞いたところ、既存の関数に引数を追加したい時に使うと教えてもらいました。言われれば、呼び出し元に影響を与えず関数の中を変えられますので当然ですね。

Azureのストレージにおけるデータの冗長性

今回はAzureのストレージにおけるデータの冗長性についてまとめた。 Microsoftのドキュメントはとても丁寧に作られていて、こちらも読んでみてほしい。 このドキュメントは丁寧に作られている反面、普段触りなれていない人には内容として少し難しいかもしれない。 そのため、この記事はスッと理解できて説明の場ですぐ使えるようなレベルを目指した。 参考になれば!

docs.microsoft.com

※この記事は2020/07/07時点の情報を元にしています。

Azure Blob Storage とは?

Blob Storageは、Azureで提供されているストレージサービスで、AmazonAWSだとS3が同じサービスに該当する。 RDBサービスやNoSQLサービスのような構造化・半構造化データではなく、テキストや画像データなどの非構造化データを保存することに最適化されている。

Azure Blob StorageはBlobストレージとAzure Data Lake Storage Gen2の2つから選択できる。 この2つの違いについて歴史も交えつつ簡単に説明する。 元々はストレージサービスとして提供されていたのはBlob Storageしかなかった。 ビッグデータを扱えるストレージのニーズが高まり、Azure Data Lake Storageが誕生した。 これにより基本的なクラウドストレージサービスのBlob Storageとビッグデータ利用に最適化されたAzure Data Lake Storageの棲み分けが発生した。 現在はAzure Data Lake Storage Gen2と名称が変更され、Blob StorageとAzure Data Lake Storageが含まれたものになっている。

Azure Blob Storageにおけるデータの冗長性

データ冗長性について考えなければいけないことは3段階ある。 最初は「配置するリージョンでの複製方法」。次に、「ペアリージョンにも複製するか」。最後に、「複製したペアリージョンへのデータと読み取りを許可するか」となる。

配置するリージョンでの複製方法

まず配置するリージョンでの複製方法だが、これは「ローカル冗長ストレージ(LRS)」と「ゾーン冗長ストレージ(ZRS)」から選べる。 「ローカル冗長ストレージ」は1つの場所の中でデータを3回コピーする方法。 架空の話だがイメージとしては、東日本リージョン内の関東の中だけで3回データをコピーすることになる。 「ローカル冗長ストレージ(LRS)」は最もコストが安いがMicrosoftとしては推奨していない。 これは複製したデータが1箇所でしか保持されていないためであり、関東の交通網が大雪で止まってしまい、通勤通学に支障が出ることに似ている。 ローカル冗長ストレージは年間 99.999999999% (イレブン ナイン) 以上の持続性が提供される。

それに対する「ゾーン冗長ストレージ(ZRS)」はリージョン内に用意されているゾーンの間でデータをコピーする方法になる。 こちらも架空の話だが、東日本リージョン内の 北海道 / 東北 / 関東 の中でデータをコピーするイメージとなる。 「ローカル冗長ストレージ(LRS)」と比較すると、関東だけにデータを留めておくよりも広範囲に保存されることになります。 当たり前だが「ローカル冗長ストレージ(LRS)」よりも広範囲にデータが保存されるため冗長性は高くなる。 しかし、先程の関東の大雪よりも広い範囲、要は東日本全体への大雪がきてしまったら通勤通学を始め、飛行機新幹線での出張にも影響が出てしまうことに近い。 ゾーン冗長ストレージは年間 99.9999999999% (トゥエルブ ナイン) 以上の持続性を提供される。

配置するリージョン内での複製方法については以上となる。 じゃあ関東または東日本に大雪がきてしまったときのために、ペアとなっているリージョンにもデータを複製することを考え始めるのが次の項目となる。

ペアリージョンにも複製するか

ペアリージョンにも複製するかだが、これは「geo冗長ストレージ(GRS)」か「geoゾーン冗長ストレージ(GZRS)」から選べる。 「geo冗長ストレージ(GRS)」は「ローカル冗長ストレージ(LRS)」をペアのリージョンでも実施することになる。 先程出した例の延長線でいうと、東日本リージョン内の関東の中だけで3回データをコピーしたあとに、西日本リージョン内の関西の中で3回データをコピーすることに近い。

次に「geoゾーン冗長ストレージ(GZRS)」は各リージョン内に用意されているゾーンの間でデータをコピーする方法です。 東日本リージョン内の 北海道 / 東北 / 関東 の中でデータをコピーした後、西日本リージョン内の 関西 / 中部・四国 / 九州 の中でデータをコピーするイメージになる。

もちろん、ペアリージョンにコピーしているので東日本リージョンが使えなくなってしまった場合に、西日本リージョンのデータを使うことができる。普段から西日本のデータを読み取ることはできないが、いわゆるフェールオーバーが完了すると、西日本リージョンでデータの読み書きが可能となる。

ペアリージョン間のデータの同期ですが、これは非同期的に複製される。 どちらも年間 99.99999999999999% (シックスティーン ナイン) 以上の持続性を提供している。

複製したペアリージョンへのデータと読み取りを許可するか

「geo冗長ストレージ(GRS)」か「geoゾーン冗長ストレージ(GZRS)」はあくまでも、障害からデータを守るために複製する意味を持っている。 そしてペアリージョンでのデータの読み取りをできるのはフェールオーバー後でもあった。 しかし、「読み取りアクセス(RA)」を選択するとフェールオーバーをしなくてもペアリージョンからデータを読み取ることができる。 名称は「読み取りアクセスgeo冗長ストレージ (RA-GRS)」と「読み取りアクセスゾーン冗長ストレージ(RA-GZRS)」になり、増えた接頭辞の「RA」はRead Accessを指す。

まとめ

Azure Storage の冗長性についてまとめた。 「LRS」「ZRS」「GRS」「GZRS」「RA-GRS」「RA-GZRS」と英語が並んでややこしくなったが末尾の「RS」は「Redundancy Storage」のことを指している。 初めにも書いたが、Microsoftのドキュメントを参照するとより詳しいことが書いてあるのでそちらも参照してもらいたい。 ひとまず「L, Z, G, GZ, RA-G, RA-GZ」の部分が何を指しているのかが理解できて、説明できれば大丈夫だと考える。

おわりに

この記事はスッと理解できて説明の場ですぐ使えるようなレベルを目指した と前置きをしたが、自分ならどう説明するかの思考整理と理解整理も兼ねている。 「ナレッジの共有」と言うと聞こえは良いが、実際に組織としてうまく回せていることは少ないし、ファイルをどん!とおいてあるところが大半だと思う。 なので、新人でもとりあえず暗記すれば話せて、そこで成功体験を積め、最終的に技術の深いところに入ってもらうきっかけになればと思いながら筆を走らせた。 具体例を挟むと抽象的な部分は抜け落ちるし難しいと感じる。

何か間違っている部分があればご連絡お願いします。

参考情報

docs.microsoft.com