プログラマーですが何か?まだプログラマーですが何か?プログラマーネタとアスリートネタ中心。バックアップ/リストアツールを作った本エントリでは、そもそも何故このようなツールを作ったのか、実現においてどのような制約事項があり、どのように制約を回避したか、その背景を技術者視点で紹介します。「必要なのか?」と言われると、結構鋭い視点だと思います。あり、データは複数のサーバーインスタンスに分散して格納されます。「どこか1つのサーバーが死んだ場合でもデータがどこかに残っている」ことはこの仕組自体の中で提供されています。これで充分、と考える人や用途であれば不要という判断もアリです。いえ、データベースを手軽に丸ごと引越したり、(精神衛生上の問題から)手元にバックアップを残しておきたいと考えたり、そのバックアップファイルをストレージに保存してストレージ代を稼ぎたいクラウドベンダー/インテグレーター側の事情(苦笑)などからバックアップとリストアを行う需要はあると思っています。【ツールがないとバックアップ/リストアはできないのか?】これも難しい質問です。使って読み書き更新削除検索・・といった操作を行うことになります。API」も、どちらも存在しています。API」と呼ぶことにします。組み合わせればバックアップとリストアは実現できそうに見えます。インプットするデータのフォーマットが異なる」という点です。データとしてのフォーマット(データ階層)が元のデータのフォーマットとは異なる」という結果が待っているのでした。フォーマット)が同じではなくなってしまうのでした。いう方法でアクセスすることになる、という違いが生じます。ここは考えようで、「元のデータが残っているかどうか」という観点では残っているといえます。データとして見たときの階層情報が異なっていて、全く同じデータではない(特定の属性の値を取得する場合の取得方法は異なる)のです。これを許容できるかどうかの問題とも言えますが、一般的にバックアップ/リストアという言葉からイメージするのはデータフォーマットの変更が許されるものではないと思っています。そのまま使って実現する方法は選択できなくなります。実行するには事前にデータベースを新規に作成しておく必要があります。「データベース作成+文書リストア」という2度手間をかけるのも不便だし、そういった利便性まで含めて考えると1発で実現できるなんらかのツールがあるべきだし必要、という判断になります。そのまま使う方法ではなく、処理の途中にフォーマット変換を行うようなバックアップ/リストア処理を行うツールを作ります。そのまま使い、その結果をバックアップファイルとする。リストア時にはバックアップファイルからデータを1つずつ取り出し、リストアしたい部分だけを取り出して1件ずつ書き込む。そのまま使い、その結果をバックアップファイルとする。一括書込みした時にデータフォーマットが乱れないような形にバックアップファイルを加工する。用に加工した上で保存し、バックアップファイルとする。別の制約が問題になります。件しか書込みリクエストを処理できない」という制約事項を意識する必要があります。発生を確認しています)。ような非同期処理を基本とする実行環境では非常に面倒な問題になります)。仮にそこまで作り込んだとしても、多くのドキュメントを持つデータベースのリストアには非常に多くの時間がかかり、その多くは待ち時間となる可能性が高くなります。方法は断念することにしました。実行回数に比例するコスト上昇という問題も抱えてしまいます。方法を取ることにしたのでした。用)に加工してからバックアップファイルとして保存する、という方法です。渡して一括書込みを行うことにします。ような非同期処理の実行環境でも(一括で書込みを行うだけなので)あまり意識せずに実装することができます。実行してもリストアできる、という副産物的なアドバンテージもあります。色々を事情や背景を書き並べましたが、要は「自分はバックアップを手元に置きたい派」で、「自分で手軽にバックアップを取りたくて作った」のです。制約事項の勉強にもなったし、一応動くものもできたし、いい勉強にもなりました。仮想イメージが配布されていたりするので、これらを使うと「インストール」という作業を行わなくてもそのまま使えちゃいます(現にそのイメージを使う解説サイトも目立ちます)。今回はオンプレミスや普通の(?)仮想マシンでも使えるように、サーバーソフトの導入手順を紹介します。