エフゲニー・シャドリン(Sberbank Digital Ventures)
過去数年のニュースを追跡すると、新しいNoSQLソリューション、いくつかのリリースがほぼ2週間ごとに表示されることがわかります。 もちろん、それらの多くは存続せず、競争に負け、消滅しますが、NoSQLの世界は頻繁に新しいソリューションで補充されます。
会議では、人生でNoSQLを使用したことのない人と、プロジェクトや企業で5年以上NoSQLを使用している人がいます。 オープンソースプロジェクトに参加する人もいます。 それらは少数ですが、そのようなものもあります。
私の名前はユージーンです。 私はSberbank Digital Venturesの小さな支店で働いています。SberbankDigital Venturesは、革新的な製品とソリューションの実装に取り組んでいます。 私たちは、新しい技術の接点でITプロトタイプを作成します。
このレポートでは、ユーザー側でNoSQLソリューションを使用する場合について説明したいので、最初は理論について簡単に説明します。
NoSQLとは何ですか?
私は頭字語をSQLだけでなく、つまり使用しています。 SQL
だけではありません 。 これらは、リレーショナルとは異なり、いくつかの問題を解決するために設計されたデータモデルを含むソリューションです。 たとえば、スケーリングの容易さの問題。 多くの場合、データを保存および操作するためのNoSQLソリューションは、特定のスキーム、エンティティ、および多くの構成を指定する必要がないため、スケーリングの問題を解決し、多数のノードを持つ大規模なクラスターを展開し、これらのノードを追加および削除することは非常に簡単で簡単です。 また、NoSQLソリューションは多くの場合非常に専門化されています。 各開発チームは常に大規模な普遍的なプロジェクトを作成しようとするのではなく、問題を解決しようとします。 このようなソリューションの特殊化により、特定のタスクで非常に高いパフォーマンスインジケーターを実現できます。 このようなタスクでは、NoSQLソリューションを使用すると便利で簡単になります。
ここでは、最も人気のあるデータベースを分類順に示しました。 RedisリポジトリとRiakリポジトリのKey-Valueについて聞いたことがあります。これらは、Key-Valueモデルを使用してデータを保存します。 MongoDBのドキュメント指向データベースは非常に一般的で有名です。 ドキュメント指向モデルは、キー値モデルよりもやや複雑であり、非常に大きな階層情報を保存できます。 さらに、表形式のマトリックスデータベース(Apache HBaseなど)があります。 彼らは多くの分散情報を扱うことができます。 それとは別に、OrientDBは際立っています-マルチパラダイムをサポートするデータベースですが、グラフモデルをサポートするデータベースの例として挙げました。 グラフモデルには利点があります。データ間の関係を追跡することは非常に便利です。これは、ソーシャルネットワークに似たプロジェクトで作業する場合は悪くありません。
こうした多様性の中から、自分に合ったソリューションを選択する方法は? 私は次の原則を使用します。
- 車輪を再発明しないでください。 戦いに意欲的な開発チームに会い、彼らは自分に合った独自の小さなリポジトリをすぐに作成し、必要な種類のデータを保存すると述べました。 すべてがそれほど単純ではありません。 ここでは、Tarantoolデータベースは4年以上にわたりプロの開発者チームによって開発されており、常に解決、解決、解決に値する質問がいくつかあります。 多くのNoSQLソリューションは10年以上前のものです。 したがって、特定のタスクに基づいて必要なソリューションを選択するのは正しいことです。
- ほとんどのデータベースは、問題を解決するように設計されています。 解決している問題を理解していれば、適切な解決策を見つけることができるでしょう。
- 「他者の経験を活用する」という点が明確であることを願っています。 インターネットの世界では、登り、グーグルで読み、本を読んで、最後に厚かましく書いてデベロッパーに手紙を書いて言うのはそれほど難しいことではありません。 教えてください、彼にそれを解決するためにどのようにアドバイスしますか?」 多くの開発者は、非常に反応が良く、役に立ちます。
- 運が良く、タスクにいくつかの解決策がある場合は、パフォーマンスを長時間比較したり、テストスタンドを構築したり、AとBのどちらが良いかを理解したりしないでください。 製品の分解、分解の時間を節約してください。 あなたが知っていれば-まあ、あなたの同僚が知っていれば-また悪くないなら、いつでも彼に頼ることができます。
また、NoSQLが解決するケースの簡単なリスト。
私はそれらのほとんどに個人的に出会った。
- 「キャッシュ」データ-有名なMemcachedデータベース。 ここで、中間データのストレージを追加できます。 これは、適切なタイミングで、すぐにアクセスしたいデータです。
- 「大量のデータを扱う」はおそらく正しいとは思えません。なぜなら、リレーショナルデータベースは大規模で巨大なデータストリームでも機能するからです。つまり、「ストリーム」という言葉を意味します。サーバーリクエスト、そしてそれらをすばやく保存し、次に何をすべきかを考えます。 たとえば、HBaseはHadoop製品の一部としてこの問題を解決します。
- キューサービス。 NoSQLはキューサービスの一部として機能できます。 たとえば、RabbitMQとRedisの組み合わせは、私の練習で数回満たされました。NoSQLの形式のシンプルで便利なバックエンドです。
- それとは別に、統計データ処理用のプラットフォームを持ち出しました。 これは、データを受信し、それらすべてを保存したくない場合です。メモリがなく、リソースが限られています。 このデータをすぐに処理できます。 たとえば、ユーザーの兆候を取得し、不必要な兆候を捨て、残りを正規化して、単純に「キー値」ベクトルの形式で、たとえばRedisに格納できます。
- また、NoSQLをストレージの小さな便利なバックエンドとして使用できます。 ただ拾って保存しました。 MongoDBは、このケースに適した高速で便利な展開可能なデータベースです。
もちろん、ケースはもっと多くありますが、私が遭遇したケースについて話しました。 一般に、Sberbank Digital Venturesでは、リアルタイムで動作し、サーバーから情報を受信、保存、処理、内容を理解し、サーバーに正しい答えを提供することを主な目的とするシステムを開発しています。
たとえば、インターネットのどこかを歩いているユーザーに関する必要な情報を取得します。 収集、分析できるすべてのデータを取得し、ユーザーをセグメント化して、1つまたは別のカテゴリ、つまり たとえば、これは車に興味がある25歳の若者、または大学に進学して入学のために賄briを受け取る場所を探している18歳の少女です。
私の問題を解決するために、NoSQL Tarantoolデータベースを使用します。 将来的には、なぜそれを使用するのか、なぜ使用するのか、そして目の前で発生する問題の解決にどのように役立つのかを説明します。
スライドには、開発者サイトのメインページからの引用があります。これはプロジェクトの位置付けです。 「Luaアプリケーションサーバーで実行されているNoSQLデータベース」、つまり 開発者自身がTarantoolを2つの部分で構成されるプロジェクトとして位置付けています。最初の部分は非リレーショナルデータベースであり、2番目の部分はLuaアプリケーションサーバーです。 Lua言語を使用するアプリケーションサーバー。
ところで、最近のほとんどのNoSQLデータベースアイコンはグレーと赤の色を使用していることに注意してください。 これはおそらくトレンドにあります=)
さらに、コード例を示します。 誰かに機会があれば、サーバー
try.tarantool.orgへのリンクをたどることができます。これは、Tarantoolをすぐに使用できるインタラクティブなサービスです。 これは一種のインタラクティブなTarantoolであり、開発サーバーで際立っています。 おそらく誰かがそこにコード例を駆動したいと思うでしょう。
TarantoolをNoSQLテクノロジーの大規模なスタックと区別するものは何ですか?
Tarantoolはすべてのデータをメモリに保存するため、すぐにアクセスできます。 Tarantoolがメモリにそれらを保存するという事実は、それが安全ではなく、データを失う可能性があることを意味しません。 Tarantoolには、ログとバイナリ状態のスナップショットというデータストレージメカニズムがあります。 これらの2つのメカニズムは連携して機能します。保存されたデータと、このデータを使用して前後に実行されたアクションの説明を含むポイントがあります。 この情報により、いつでも正しい状態に到達できます。
かつて、データをメモリに保存すると、このメモリが非常に早く終了するという事実に至りました。 現在は終了していますが、それでもRAMの量は絶えず増加しており、同様のデータベースはより広範なアプリケーションを取得しています。 Tarantoolはドキュメントベースのデータモデルを使用しています。 彼はすべてのデータをドキュメントと呼ばれる抽象概念に保存します。 このドキュメントには独自のフィールドがあり、Tarantoolで使用できます。
データベースとしてのTarantoolの機能の1つは、セカンダリインデックスの可用性です。 セカンダリインデックスが存在することで、データを使ったアクションをより活発に、興味深く、より速くすることができます。
私はプロジェクトでトランザクションをまだ使用していませんが、Tarantoolは本格的なトランザクションをサポートしています。 私が知る限り、一部の企業(AvitoのMail.Ru Group)では、それらを使用して問題を解決しています。 Tarantoolには、軽量スレッドまたはグリーンスレッドのモデルがあります。 これはマルチスレッドモデルであり、Unixレベルではなく、アプリケーション自体の内部でスレッドのみが作成されます。これにより、何らかの非同期イベントイベントモデルを実装できます。
Tarantoolはネットワークとファイルでも動作します。独自のHTTPサーバー、ファイルを保存および開く独自のライブラリを備えています。 また、問題の解決にも役立ちました。
TarantoolはLuaアプリケーションサーバーであり、LuaはTarantool埋め込み言語です。 ここでは、Luaが何であるかを示すために実際には絶対に使用されない非常に人工的なスクリプトの例を示しました。
#!/usr/bin/tarantool
Lua言語はブラジルのカトリック大学で開発されました。 これは、データを処理し、データベースを処理するために強化されたSOL言語から来ました。 ここで、これは単なるスクリプトではなく、実行可能なスクリプトであることがわかります。 ポンド記号と感嘆符は、このスクリプトを誰がどのように実行するかを指定できるメカニズムです。 コンソールに
tarantool script.lua
と入力すると、画面に
hello world
が表示されます。 ここでは、2つのオブジェクトで機能する関数を参照し、以下ではこれらのオブジェクト自体を初期化します。
Luaの主なデータ構造はテーブルです。 オブジェクト
a
と
b
はテーブルであり、Luaが非常に柔軟で構文的に優れていることを示すために、意図的に異なる方法で初期化しました。 これらのテーブルには、他のデータが含まれている場合があります。たとえば、同じテーブルに他のデータが含まれている場合があります。 時々、経験の浅さが非常に大きなネストを構成していました。 関数はテーブル内に保存することもできます。 一般に、テーブルと同様に「関数」オブジェクトを操作することもできます。これにはメソッドがあります。
さらに、制作の一部で変更および使用できる、より実用的なスクリプトの例を示します。 彼は小さな問題を解決し、非常に簡単に解決します。彼はページ上のユニークビジターの数を考慮します。
#!/usr/bin/tarantool
これは、いわゆる実行可能なLuaスクリプトであり、Tarantoolで起動され、それに埋め込まれた一連のアクションを実行します。
ここにあるもののブロックを簡単に見てから、詳細を分析します。
上部で、必要なメカニズム(ログ、コンソール、サーバー)を介して必要なパッケージを接続します。 使用するいくつかの定数を定義します。
次のステップは、
box.cfg
モジュールを使用してTarantoolデータベースを構成することです。ここで、必要な2つのパラメーターを設定します。 コンソールを起動し、
box.schema.space.create('users')
を使用してデータベースエンティティを作成します。 ユーザースペースを作成しました。 これについては少し後で説明します。
スクリプトの2番目の部分はTarantoolサーバーで動作しています。
handler
関数(要求ハンドラー)について説明し、以下でサーバーを作成し、処理用の
route
を作成してこのサーバーを起動します。
ユーザー側から見ると、このスクリプトの実行結果は次のようになります。
ユーザーは、たとえばlocalhostにログオンし、ウェルカムメッセージを見ました。 将来、彼がページを更新すると、彼はすでに
cookie
へのリンクを持ち、ある種の
id
が割り当てられ、このページにアクセスしたユニークユーザーの数がわかります。
この小さなスクリプトは、私が必要とするいくつかの問題を解決します-これは、なぜLua言語を使用するのかという質問に対する答えです。
Lua言語は非常にシンプルです。 「15分でルア」、「30分で」という記事がすべてあります。この興味深い言語に慣れるには、少しだけ必要です。 数時間で、そのすべての機能を学習します。
主なデータ構造がテーブルであると非常に便利です。 これにより、他のすべてのデータを均一に処理できます。
標準のLuaインタープリター自体は非常に高速ではなく、むしろ非常に高速ではありませんが、JITコンパイルを行う同様のLuaJITインタープリターがあり、はるかに高速です。 Luaを非常に生産的な言語にするのは彼です。
機能的なスタイルでLuaでプログラムできるようにするluafunライブラリがあります。 LuaJITのおかげで、このライブラリは非常に高速です。 あなたはグーグル、それについて読んで、そのパフォーマンスに関するレビューを見ることができます-非常に興味深い。
Luaは埋め込み言語としても非常に優れており、C言語との優れた統合性を備えています。 有名なWorld of Warcraftゲームの非常に多くの拡張機能、クエスト、およびさまざまなゲームメカニクスとロジックは、Luaで記述されています。
Tarantoolは本格的なLuaインタープリターです。 Tarantoolを起動しただけであれば、Luaを簡単に使用できます。
Tarantoolは、2つのエンティティで起動できます。
- 1つ目はインタープリターとして、つまり Tarantoolを起動し、いくつかのコマンドを1行ずつ実行します。 これは、何かを知らない場合や、ドキュメントからコマンドを実行する場合に便利です。
- 2番目
init.lua
起動スクリプトを使用して(好きなように呼び出すことができます)、コマンドのシーケンスが書き込まれます。
上記のinit.lua起動スクリプトの例をさらに詳しく見てみましょう。
作業は、その構成を持つデータベース、つまり
box.cfg
メカニズムは、内部に
cfg
ラベルを含む
box
パッケージであり、いくつかのパラメーターを設定できます。 ボックスはボックスです。 このパッケージは、データベースを直接管理します。 Tarantoolの起動、プロシージャ、関数の実行、メッセージの書き込みなどを実行できますが、
box.cfg
を構成しないとデータベースは起動しません。 この場合、表示したい2つのパラメーターを設定します。 まず、印刷されるログのレベルを設定します-これは5番目のレベルであるDEBUGです。 また、非常に重要なパラメーター
slab_alloc_arena
設定しました。これは、割り当てとデータ配置のためにTarantoolで、より正確にはRAMで割り当てられるメモリです。 この場合、「1」は1 GBです。
ボックスパッケージには、次のような多くの他の補助的なものとツールも含まれています。
box.info
は、 box.info
に関する一般情報を表示するライブラリです。box.slab
は、 box.slab
のデータを監視し、残っているスペースを確認するための重要なプレートです。box.stat
統計ライブラリ。 insert
、 select
、および実行したその他の操作の数を示します。
パラメーターを設定した後にTarantoolインタープリターでbox.cfgと
box.cfg
すると、そこにあるすべてのパラメーターの説明を含むオブジェクトが取得されます。設定したパラメーターだけでなく、デフォルトで設定されているパラメーターもあります。
ここで、
slab_alloc_arena
-1 GBの割り当てスペース、5番目のレベル
log_level
(DEBUG)、重要なパラメーターsnapshot_countが設定されていることがわかります。これはTarantoolが保存するスナップショットの数です。 この場合、特定の期間に撮影された最新の6枚の写真が保存されます。 ところで、この期間はまた、
snapshot_period
パラメーターを使用してここで設定されます。 デフォルトでは、その値は3600秒です。 Tarantoolは1時間に1回スナップショットを撮ります。 自分で必要なセキュリティレベルを選択することができ、少なくとも1秒ごとまたは1分ごとに写真を撮ることができますが、リソースを非常に占有します。
snap_dir
および
wal_dir
、スナップショットとログをそれぞれ保存する場所を決定します。
次に、
box.info
パッケージの例を
box.info
ます。 ここでは、Tarantoolに関する情報、つまり Tarantoolがデーモンとして実行されている場合、そのpid、バージョン(現在、バージョン1.6.5が関連しています)、稼働時間、およびマシンのステータスを確認できます。
データを設定したら、Tarantool内のエンティティ自体、データ自体の作成に進むことができます。
ここで、ドキュメントから写真を取りました。 これは、Tarantoolデータモデルの画像です。 Tarantoolでは、データはスペースに格納され、各スペースにはタプルエンティティがあります。これらは、プライマリまたはセカンダリの指定したレコードとインデックスです。
構成が完了したら、データベースの入力に進みます。 ユーザー情報を設定するスペースが必要です。
この情報を条件付き構造に入れていることに気づくかもしれません。 これは特定の目的のために行われました:何らかの理由でTarantoolが停止し、保存された画像とログで再起動した場合、起動前に状態を復元します。 スナップショットを取り、xlogからアクションを実行します。 この方法で実行すると、必要なユーザースペースを作成できませんが、ほとんどの場合は必要ないため、エラーが発生しないようにこのようなチェックを挿入することが非常に多くあります。 そのようなスペースを作成していない場合は、スペースとそのインデックスを作成します。 この場合、これは
primary
-単一の数値であるツリー形式のプライマリインデックス。
将来、スクリプトに新しいユーザーエントリを追加する必要があります。 キーと値のペアを渡す標準の
insert
操作を使用してこれを行うことができますが、私の場合、この単純なスクリプトでは
auto_increment
を使用してこれを行うのが便利
auto_increment
。 ユーザーはログインし、その時点でデータベース内のレコード数よりも1つ多くキーが自動的に割り当てられます。 データベース内のレコード数を調べたい場合は、標準の
len()
メカニズムを使用できます。 ご覧のとおり、構文は非常にシンプルで簡単です。
前述のように、Tarantoolは単なるデータベースではなく、本格的なLuaアプリケーションサーバーです。 おそらく、ここでの開発者は、Luaで任意のモジュールとパッケージを作成し、それによって必要なロジックを実装できることを意味しました。 実際、あなたは大きな自転車を発明しません-あなたが本当にそれを必要とするか、他のソリューションで必要としないなら、あなたはいくつかの小さな自転車を発明することができます。
これらはすべて、GitHubのリポジトリで確認できます。 何らかの形で使用される主なモジュールは、httpとキューです。 たとえば、
try.tarantool.orgは完全にTarantoolで記述されており、TarantoolサーバーであるTarantoolリポジトリを使用します。 Tarantoolは、LuaRocksもサポートしています。LuaRocksは、そのリポジトリと連携し、パッケージのインストールに非常に便利なパッケージマネージャーです。 これは1つのチームによって行われます。
パッケージ。 パッケージを接続する必要があります。
パッケージとは、何らかのロジックを実装する他のLuaスクリプトを指します。 このパッケージを接続すると、このファイルからメソッド、このファイルからのデータ、変数を取得できます。 この例では、Luashメカニズムのrequireメカニズムを使用して、
console
と
log
2つのパッケージを接続します。
localhostで
console
を実行し、ポート33013でハングさせ
log
パッケージを使用して、
log
書き込むことができます。 ここでコンソールとは、管理者コンソールまたはリモート管理コンソールを意味し、Tarantoolのステータスを監視できます。 これを行うのは難しくありません。コンソールが実行されている場合は、標準のUnixツールまたはその他のツール(telnetやrlwrapなど)が適しています。 ポートに接続してリッスンするにはtelnetが必要です。コマンドの便利な入力とコマンドの履歴の保存にはrlwrapが必要です。
自分に合ったTarantoolにアクセスして、
box.info
または
box.stat
からの情報を
box.info
でき
box.stat
。
私が使用し、非常に頻繁に必要なパッケージはhttpです。 これはまだ制限されたHTTPサーバーですが、必要なメカニズムの多くで機能します。 この場合、パッケージを接続し、サーバーを作成し、処理用の
route
を切断して起動しました。 次に、
handler
関数で、テキスト情報の形式でサーバーに応答を返し
cookie
ユーザー
tarantool_id
、
value = id
cookie
設定
cookie
ます。 また、有効期限も設定します。 除去時間;
cookie
はここに保存されます。
http
パッケージの基本的なメカニズムにより、最小限のロジックを実装できます。 非常に完全なサーバーがあり、クライアントがあります。 このパッケージはCookieで動作し、Luaをテンプレート内の一部の変数のある種の埋め込み可能言語としてサポートします。 LuaのHTML内に小さなプロシージャを作成できます。
#!/usr/bin/tarantool
このスクリプトの要点を説明しようとしたので、既に明確になっているはずです。 修正するには、もう一度歩くことができます。 コメント付きの実行可能なTarantoolスクリプトがあります。 次に、
require
を介してパッケージを接続します。
HOST
と
PORT
2つの変数があります。 次に、Tarantoolがbox.cfgを介して構成され、
log_level
(ロギングレベル)と
slab_alloc_arena
(割り当て用のスペース)の2つのパラメーターを設定します。
使用する管理コンソールを作成しています。 さらに、必要なスペースがない場合は、
box.schema.space.create
を使用して
users
スペースを作成し、そのインデックスを作成します。
function handler(self) local id = self:cookie('tarantool_id') local ip = self.peer.host local data = '' log.info('Users id = %s', id) if not id then data = 'Welcome to tarantool server!' box.space.users:auto_increment({ip}) id = box.space.users:len() return self:render({ text = data}): setcookie({ name = 'tarantool_id', value = id, expires = '+1y' }) else local count = box.space.users:len() data = 'You id is ' .. id .. '. We have ' .. count .. ' users' return self:render({ text = data }) end end httpd = server.new(HOST, PORT) httpd:route({ path = '/' }, handler) httpd:start()
処理機能では、ページにアクセスしたユーザーが保持する
cookie
を取得します。 私は彼のIPを見て、ログに書き込みます。
id
tarantool_id
にない場合、このユーザーのIP情報を自動的にデータベースに入力し、その
id
を確認してウェルカム情報
data
を返し、
cookie
を
id
設定します。 それ以外の場合は、テーブル内のレコードの数をカウントし、ユーザーに一意の訪問者の数を返すだけです。 そして最後に、関数を説明したときに、サーバー自体を起動して、既にそれを使用しています。
これは簡単な例ですが、モジュールとLua言語のアクセスの拡張性のおかげで、追加、追加、追加ができ、しばらくすると実際のプロジェクトで使用される状態になります。
Tarantoolにはさまざまなパッケージがあります。 JSONを操作するためのパッケージ、ファイバーパッケージ(以下でもう少し詳しく説明します)、yaml、暗号ライブラリダイジェスト(基本的な必要な暗号化メカニズムが含まれています)があります。 ノンブロッキングソケットのパッケージがあり、ネットワークで自分で作業し、いくつかのプロトコルを実装できます。 MessagePackには作業があり、ファイルを操作するためのライブラリfio(ファイル入力/出力)があります。 また、Tarantoolがバイナリプロトコルで動作することを可能にする興味深いnet.boxメカニズムがあります-たとえば、別のTarantoolで。 非常に迅速かつ便利です。 Net.box.sqlは、一部のリレーショナルSQLデータベースを操作するためにも実装されています。
ファイバーはいわゆるライトスレッドで、グリーンスレッドモデルに従って機能します。 それらと標準フローの主な違いは、それらが作成され、Tarantool内で動作することです。したがって、それらは十分に迅速に作成され、優れたスイッチングパフォーマンスを備えています。 何らかの非同期モデルを実装している場合や、メインロジックと並行して何か他のことをしているデーモンを起動する必要がある場合に役立ちます。
ファイバーを使用する基本的な原則:ファイバーを作成する必要があります。ファイバーをfiber.sleepでスタンバイモードにできます。また、fiber_objectはfiber.createです。いつでもスキャンして作業を終了できます。
非常に便利なfiber.timeライブラリ。これは、時間をカウントするイベントループから目的の値を常に推測できます。
ファイバーライブラリを使用して、非常に人気のある期限切れのライブラリが作成されました。これは、何らかの理由でデータベースから削除を実行できます。 通常は今回、つまり 1か月など、保存されているすべてのものを削除してクリーニングできます。
あなたはタランツールについて長い間話すことができます、私たちもすべてを知っているわけではありません。 開発者自身が彼についてすべてを知っているかどうかはわかりません。
tarantool.orgのドキュメントをいつでも読むことができますが、最近変更され、より読みやすくなりました。
Tarantoolは、ほとんどのUnixライクシステムをサポートし、独自のBuildbotを備えており、新しいパッケージの出現を常に監視しています-Red Hat Enterprise Linuxで作業しています。 また、Tarantool開発者は、同じDebianでTarantoolパッケージを公式にサポートしています。
そして、私が気に入っている非常に重要な点:Tarantoolでは、開発者とのコミュニケーションが可能です。 質問がありましたが、Skypeで開発者を見つけました。 Tarantoolのチーフ開発者であるKostya Osipovは、この会議のキューに関する短いレポートを読みました。 開発者、特に初心者にとって、アドバイスを求め、これを行う方法を直接学ぶことが非常に重要です。 あなたは、オープンソースアプリケーションを開発する人たちが非常に独特であり、彼らが非常に独特なコミュニティを持っていることを覚悟しなければなりません。 おそらく、この写真は私ができる以上のことを言うことができます:
しかし同時に、コミュニティでのコミュニケーションは非常に興味深い経験となり、自分自身を成長させ、プロジェクトを少し良くすることができます。
最後に、レポートを要約したいと思います。
各NoSQLソリューションには、独自のアプリケーション分野があります。 どのベースが良いか悪いか、どちらが生産的であるかを言うのは非常に難しい場合がよくあります。 彼らは本当にさまざまな問題を解決します。
開発ツールは非常に重要です。正しく選択されたツールを使用すると、迅速かつ簡単に開発でき、多くの問題を回避できます。 しかし、より重要なのはアイデア、目標であることを忘れないでください。 それでも、各開発者の課題は、問題を解決し、彼のアイデアの一部を実現し、この世界を少し良くすることです。
Tarantoolが完全に単純であり、使用することもできることをお見せできたことを願っています。 ご清聴ありがとうございました。
このレポートは、負荷の高いシステムHighLoad ++ Juniorの開発者のトレーニング会議で行われた最高のプレゼンテーションの1つです。
また、これらの資料の一部は、高負荷システムHighLoadの開発に関するオンライントレーニングコースで使用されますガイドは、特別に選択された文字、記事、資料、ビデオのチェーンです。 私たちの教科書にはすでに30以上のユニークな資料があります。 接続してください!
さて、主なニュースは、 HighLoad ++ Juniorを含む8つの会議を含む春祭り「 Russian Internet Technologies 」の準備を開始したことです。