Ubuntu12.04VPSにRethinkDBをインストールして構成する方法
ステータス:非推奨
この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。
理由:
Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達しました and no longer receives security patches or updates. This guide is no longer maintained.
代わりに参照してください:このガイドは参照として役立つ場合がありますが、他のUbuntuリリースでは機能しない場合があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。
序章
多くのアプリケーションでは、データを保存して効率的にクエリするためにデータベースバックエンドが必要です。 従来、リレーショナルデータベース管理システムが最も人気がありましたが、非リレーショナルモデルは急速に勢いを増しています。
プログラミング環境内での使いやすさに焦点を当てた興味深い非SQLデータベースの1つは、RethinkDBです。 RethinkDBは、簡単に拡張できるJSONドキュメントストレージデータベースを構成するのが簡単です。
RethinkDBをプログラミング言語で簡単に使用できるようにする1つの機能は、堅牢なクライアントドライバーをサポートすることです。 これらを使用すると、プログラミング言語でおなじみの構文の多くを使用してデータベースを操作できます。
このガイドでは、Ubuntu12.04VPSにRethinkDBをインストールして構成します。 Pythonクライアントドライバーを使用してこれと対話し、ネイティブまたはネイティブに近いプログラミング構造を使用してクエリ言語にアクセスする方法を示します。
インストール
RethinkDBの設計を完全に活用するには、インストールする必要のある2つのコンポーネントがあります。 1つ目はデータベース自体です。 2つ目は、選択したプログラミング言語内からデータベースにアクセスするためのサポートを提供するクライアントドライバーです。
ここでは、両方のコンポーネントについて説明します。
RethinkDBデータベースソフトウェアをインストールします
RethinkDBソフトウェアは、Ubuntu12.04のデフォルトのリポジトリにはありません。 幸い、このプロジェクトでは、独自のPPA(パーソナルパッケージアーカイブ)を維持することで、簡単にインストールできます。
Ubuntu 12.04にPPAを追加するには、最初にpython-software properties
パッケージをインストールする必要があります。このパッケージには必要なコマンドが含まれています。 パッケージインデックスを更新してからインストールします。
sudo apt-get update
sudo apt-get install python-software-properties
ソフトウェアプロパティパッケージがインストールされたので、RethinkDBプロジェクトのPPAを追加できます。 次のように入力して、このリポジトリをシステムに追加します。
sudo add-apt-repository ppa:rethinkdb/ppa
次に、パッケージインデックスを更新して、利用可能な新しいパッケージに関する情報を収集する必要があります。 その後、RethinkDBソフトウェアをインストールできます。
sudo apt-get update
sudo apt-get install rethinkdb
これでデータベースソフトウェアが利用可能になり、その機能にアクセスできるようになりました。
Pythonクライアントドライバーをインストールする
データベース自体をインストールしましたが、データベースシステムのクライアントドライバーをインストールする必要があります。 選択したプログラミング言語に応じて、クライアントドライバには多くのオプションがあります。
公式にサポートされている言語は、JavaScript、Ruby、およびPythonです。 コミュニティは、C、Clojure、Lisp、Erlang、Go、Haskell、Java、Perl、PHP、Scalaなどを含むさらに多くの言語のサポートも追加しました。
このガイドでは、Pythonがすでにシステムにインストールされているため、Pythonクライアントドライバーを使用します。 Pythonパッケージマネージャーであるpip
を使用してクライアントドライバーをインストールします。
Pythonソフトウェアを扱う際に推奨されるいくつかのベストプラクティスに準拠するために、virtualenv
を使用してPython環境を分離します。 このパッケージには、依存関係としてpipが含まれています。
sudo apt-get install python-virtualenv
virtualenvとpipがインストールされたので、ホームフォルダにディレクトリを作成して仮想環境をインストールできます。
cd ~
mkdir rethink
ディレクトリに移動し、virtualenvコマンドを使用して新しい仮想環境構造を作成します。
cd rethink
virtualenv venv
次のように入力して、環境をアクティブ化できます。
source venv/bin/activate
これにより、システムのプログラムに影響を与えることなく、分離された環境にコンポーネントをインストールできます。 環境を離れる必要がある場合(環境が必要なので、今はこれを行わないでください)、次のように入力します。
deactivate
仮想環境が有効になったので、次のように入力してRethinkDBパッケージをインストールできます。
pip install rethinkdb
これで、Pythonクライアントドライバーがインストールされ、使用できるようになりました。
RethinkDBを起動し、Webインターフェイスを探索する
RethinkDBシステムの調査を開始するには、サーバーを起動し、組み込みのWebインターフェイスを使用して調査します。
コマンドラインから、次の形式を使用してサーバーインスタンスを起動できます。
rethinkdb --bind all
サーバー自体の外部からインスタンスにアクセスできるようにするには、--bind all
パラメーターが必要です。 リモートVPSから実行しているため、これは必要な追加です。
ドロップレットのIPアドレスに続いて:8080
にアクセスすると、RethinkDBWebインターフェイスが表示されます。
your_server_ip_address :8080
ご覧のとおり、データベースサーバーへの豊富なインターフェイスを利用できます。
メインビューには、いくつかの標準的なヘルスチェックといくつかのクラスターパフォーマンスメトリックが表示されます。 ページのさらに下に、最近ログに記録されたアクティビティが表示されます。
また、データベースに関するいくつかの統計も表示されます。 青いアイコンの横にあるインターフェースは、データベースの名前と、問題が検出されたかどうかを示します。
さらに、RethinkDBはサーバーとデータセンターをネイティブに理解していることがわかります。 これは、RethinkDBがゼロから構築されており、簡単にスケーラブルで配布できるためです。
ページ上部の[テーブル]リンクをクリックすると、データベースに追加したテーブルが表示されます。
ここから、サーバーにあるすべてのデータベースを確認できます。 各データベース内で、作成されたテーブルを確認できます。 概要では、各コンポーネントに構成されているシャーディングとレプリケーションについても説明しています。
このビューからデータベースとテーブルを追加することもできます。
1つのテーブルをクリックすると、ロード、分散、およびドキュメント数の概要が表示されます。
各テーブルの負荷と構成に関する詳細情報は、こちらで確認できます。 シャーディングとレプリケーションの設定を編集し、インデックスを追加してクエリをより効率的に行うことができます。
上部の次のリンクに移動すると、データベースとテーブルで使用できるサーバーが表示されます。
ここから、個別のサーバーをグループ化する方法であるデータベースを管理および追加できます。 物理的に異なる場所にサーバーを展開している場合、これはすべてがどこにあるかを追跡する簡単な方法です。 サーバーが関連付けられているデータセンターの変更も非常に簡単です。
もう一度、個々のサーバーをクリックして、そのプロパティの概要を取得できます。
「データエクスプローラー」というタイトルの次のリンクに進むと、クエリ言語を使用してサーバーと対話するためのインターフェイスが提供されます。
このインターフェイス内からテーブルとデータを作成、削除、および変更できます。
クエリまたはコマンドを入力すると、以下の結果が表示されます。 さまざまな形式で情報を表示したり、クエリプロファイルを実行して、データベースがどのように結果を返すかを決定したかを確認できます。
ご覧のとおり、データベースとクラスターを高レベルで管理するための優れたツールがあります。
Python内からのRethinkDBとの対話
Webインターフェースはクリーンで使いやすいですが、ほとんどの場合、データベースを操作する方法ではない可能性があります。 ほとんどのデータベースは、プログラム内から使用されます。
サーバーをバックグラウンドで起動します
バックグラウンドプロセスの管理に慣れていない場合は、サーバーをバックグラウンドで起動してターミナルでの作業を継続できるようにする方法について簡単に説明します。
ターミナルで「Ctrl-C」を押すと、サーバーをシャットダウンできます。 次に、バックグラウンドで再起動して、次のコマンドで再起動することにより、ターミナルにアクセスできるようにします。
rethinkdb --bind all &
&
はバックグラウンドでプロセスを開始し、作業を続行できるようにします。
もう1つのオプションは、最初のサーバープロセスを強制終了せずに、サーバーを一時停止してからバックグラウンドで再開することです。 代わりに「Ctrl-Z」と入力することでこれを行うことができます。
その後、次のように入力して、バックグラウンドでプロセスを再開します。
bg
次のように入力すると、いつでもプロセスを確認できます。
jobs
[1]+ Running rethinkdb --bind all &
タスクを再びフォアグラウンドに移動する必要がある場合(おそらく、終了時にタスクを強制終了するため)、次のように入力できます。
fg
その後、タスクはフォアグラウンドで再び使用可能になります。 複数のバックグラウンドプロセスがある場合は、次の形式を使用してジョブ番号を参照する必要がある場合があります。
fg% num
サーバーがバックグラウンドになったら、Pythonを介してデータベースの調査を開始できます。
Pythonを使用したRethinkDBシステムの調査
Pythonインタープリターを起動して、データベースとの対話を開始できるようにします。
python
ここから、クライアントドライバーを環境にインポートする必要があります。
import rethinkdb as r
これで、connectコマンドを使用してローカルデータベースに接続できます。
r.connect("localhost", 28015).repl()
最後の.repl()
を使用すると、.run()
呼び出し内で接続を明示的に指定せずに、形成された接続でコマンドを呼び出すことができます。 これは、このような状況をテストする際の便宜のために使用されます。
これでサーバーに接続でき、データベースの操作をすぐに開始できます。
次のように入力することで、試してみるデータベースを作成できます。
r.db_create("food").run()
これで「食品」というデータベースができました。 最後にチェーンされた.run()
コマンドは非常に重要です。 RethinkDBコマンドはローカルコードのように見えますが、実際にはRethinkDBクライアントドライバーによってネイティブデータベースコードに変換され、サーバー上でリモートで実行されます。
runコマンドは、これをサーバーに送信するものです。 .repl()
コマンドを最初のサーバー接続に追加しなかった場合は、次のようにrunコマンドに接続オブジェクトをリストする必要があります。
conn = r.connect("localhost", 28015)
r.db_create("food").run(conn)
これらの最初のいくつかのコマンドは、コマンドチェーンがRethinkDBでどのように機能するかについての一般的な考え方を示しています。 複雑なコマンドを作成して、一度に複数の操作を実行できます。 これにより、複数の呼び出しを行う代わりに、すべてが変換されてデータベースに一度に送信される、読み取り可能なシーケンシャルコマンドチェーンを作成できます。
データベースができたので、テーブルを作成しましょう。
r.db("food").table_create("favorites").run()
次に、テーブルにデータを追加できます。 RethinkDBは柔軟なスキーマ設計を使用しているため、任意の種類のキーと値のペアを追加できます。 何人かの人を追加してから、お気に入りの食べ物を追加します。
r.db("food").table("favorites").insert([
{ "person": "Randy", "Age": 26,
"fav_food": [
"banana",
"cereal",
"spaghetti"
]
},
{ "person": "Thomas", "Age": 8,
"fav_food": [
"cookies",
"apples",
"cake",
"sandwiches"
]
},
{ "person": "Martha", "Age": 52,
"fav_food": [
"grapes",
"pie",
"avocado"
]
}
]).run()
これにより、「お気に入り」テーブルに3つのJSONドキュメントが作成されます。 各オブジェクトは、人、年齢、および人の好きな食べ物の配列を定義します。
照会することでドキュメントを印刷できます。 これを行うには、データベースとテーブルを要求するだけで、サーバーは反復可能なオブジェクトを返し、それをループで処理できます。
サーバーは、カーソルと呼ばれるオブジェクトが処理されるときにデータを継続的に提供します。 たとえば、次のように入力してすべてを印刷できます。
c = r.db("food").table("favorites")
for x in c:
print x
{u'person': u'Martha', u'Age': 52, u'fav_food': [u'grapes', u'pie', u'avocado'], u'id': u'b888ec64-f2c9-4f85-9db6-f8b8a66626c6'}
{u'person': u'Thomas', u'Age': 8, u'fav_food': [u'cookies', u'apples', u'cake', u'sandwiches'], u'id': u'3aa7ae68-85b0-48b6-9726-76e810ea4c55'}
{u'person': u'Randy', u'Age': 26, u'fav_food': [u'banana', u'cereal', u'spaghetti'], u'id': u'f027a270-d5ac-4c33-ad91-53a7541ace82'}
これにより、各行が順番に印刷されます。 この例では変数「c」で表されるカーソルオブジェクトは、処理時にサーバーから新しいデータが与えられます。 これにより、コードをすばやく実行できます。
「お気に入り」テーブルに追加した各レコードにIDが付けられていることに気付いたかもしれません。 これは自動的に行われ、各テーブルの内容にインデックスを付けるために使用されます。
コマンドチェーンに別のリンクを追加するだけで、結果をフィルタリングできます。
c = r.db("food").table("favorites").filter(r.row["fav_food"].count() > 3).run()
for x in c:
print x
{u'person': u'Thomas', u'Age': 8, u'fav_food': [u'cookies', u'apples', u'cake', u'sandwiches'], u'id': u'3aa7ae68-85b0-48b6-9726-76e810ea4c55'}
ご覧のとおり、.filter()
コマンドを追加しただけです。 r.row
を使用して「fav_food」キーを参照し、各行のエントリ数をカウントしました。 簡単な比較を行って、好きな食べ物が3つ以下の人を除外しました。
結論
ご覧のとおり、RethinkDBシステムのデータを簡単かつ自然に操作できます。 RethinkDBは、簡単かつシームレスに拡張する機能を犠牲にすることなく、開発の観点から簡単であることに誇りを持っています。
このガイドでは、RethinkDBを操作するいくつかの方法を紹介するために、基本的なことだけを説明しました。 これを実稼働環境で使用することを検討している場合は、システムのスケーリングおよびレプリケーション機能とそのデータベース対応ネットワーク機能を調べると役立つでしょう。