オンラインデータベース、データ構造サービス、動的オブジェクトリレーショナル投影(動的ORM)

この記事では、オンラインデータベースの実用的なプロトタイプの作成に焦点を当てます。 また、一部のサービスは、GoogleおよびYahooの類似品としてレビューされています。



最近、オンラインデータベースを操作するサービスがより積極的に開発され始めています。 これらのタイプのサービスには、GData(Google Data API)やYahoo!などのプラットフォームが含まれます。 クエリ言語(YQL)。



データベースへのオンラインアクセスのこれらのサービスにより、さまざまなプラットフォームサービスから受信したデータをより適切に制御および操作できます。最も重要なことは、これらは使用のための既成のサービスであり、ドキュメントと例を調べるだけで十分です。



Google Base API + Google Data Table API



Googleのオンラインデータアクセスサービスでは、



-プログラムでデータを要求、入力、管理して、アプリケーションとマッシュアップを作成します。

-Googleデータチャネル(「GData」)の形式でスプレッドシートの内容を表示および更新できます。

-クライアントは、ユーザーテーブルのリストを要求できるだけでなく、既存のテーブルのコンテンツを提示、編集、または削除できます。

-アプリケーションで自動ろ過およびその他のテーブル関数を適用します。



上記のサービスを便利に使用するために、Googleは独自のSQLのようなクエリ言語であるGoogle Visualization APIクエリ言語を開発しました。



Yahoo! クエリ言語



Yahooの情報配列からデータを取得するためのクエリ言語!.. Yahoo!からWebサービスを操作するためのSQLのようなクエリ言語..クエリ結果はXMLまたはJSON形式で取得できます。

YQL Executeの開発マネージャーであるJonathan Trevorのコメント:

「開発者は複数のサービスを同時に呼び出して複数のデータソースを操作できるようになり、アプリケーションがより強力で多様になります。 Yahoo!から受信 データをある形式から別の形式にリアルタイムでトランスコードできます。」



YQLを使用すると、SQLに似た構文を使用してデータを簡単に操作できます。 たとえば、Creative Commons Attribution(4)ライセンスがあるフランスのパリの写真を選択するとします。



select * from flickr.photos.info where photo_id(select id from flickr.photos.search where woe_id in(select woeid from geo.places where text = 'paris、france')and license = 4)



Open Tableサービスを使用して、データテーブルを作成および保存できます。 サービスは非常に興味深いですが、説明はまだ非常に小さいです。



画像



上記のサービスを使用すると、多くのアプリケーションにとって不可欠なデータテーブルのオンライン操作にアクセスして実行できます。 上記のサービスと他の多くの同様のサービスを分析した後、データテーブルを操作するための同様のサービスを実装しました。 ただし、特定の特徴的な機能があります。 内部から直接開発を詳しく見ていきましょう。



Hivext構造サービス



APIドキュメントwww.hivext.ru/index.php/構造



プラットフォームに基づくアプリケーションの柔軟で便利な開発に非常に必要なものの1つは、サービス構造です。 私たちの開発の特徴は、そのようなサービスの実装におけるオブジェクトアプローチにあります。 長年にわたって実証された、アプリケーションを構築するオブジェクト指向アプローチのすべての利点を提供するために、サービスはOOP(オブジェクト指向設計)の方向に最大の「傾き」で設計されました。 このため、ストラクチャサービスを使用すると、開発者はOOPスタイルでアプリケーションを作成でき、開発したアプリケーションのタイプとオブジェクトを操作および管理できます。



サービスの一般的な特性



構造サービスは、タイプを決定し、タイプ(オブジェクト)のインスタンスを作成するように設計されています。 オブジェクトを作成する方法は非常にシンプルで馴染みがあります。 コレクション(オブジェクトのセット)を作成するには、最初に将来のオブジェクトのタイプを決定する必要があります。 タイプを定義するとは、将来のオブジェクトに含めるフィールドを定義することを意味します。 次に、タイプフィールドの定義とは、フィールドの名前とフィールドの単純なベースタイプを指定することを意味します。 構造サービスには事前定義された単純型があり、これに基づいて開発者はより複雑な型を作成できます。

構造サービスで事前定義されている単純型のリスト

特定のタイプのリストは、追加のタイプによってさらに拡張される場合があります。



上記のタイプに基づいて、開発者は独自のより複雑なタイプを作成できます。 例を見てみましょう。 オンライン書店を作成する必要があるとしましょう。 アプリケーションの必須オブジェクトの1つは、販売する製品ブックです。 ブックオブジェクトのタイプを定義します。 タイプを決定するために、 DefineTypeメソッドが使用されます(appid、session、type、fields)



本では、次のパラメーターを使用してメソッドを呼び出します



DefineType(appid、session、「book」、{price:” float”、name:” string”、description:” string(500)”、author:” string(100)”}



したがって、タイプbookを定義しました。これには、 価格price-本の価格、name-本の名前、 description-本の説明author-本の著者のフィールドがあります。

さらに、このタイプのインスタンスを安全に作成できます。 オブジェクトは本です。 これを行うには、メソッドを使用します



CreateObject(appid、session、type、data)



ブックの種類については、次のパラメーターでメソッドを呼び出します



CreateObject(appid、session、「book」、{price:10.5、name:「Webアプリケーションの開発」、説明:「複雑な1ページのWebサイトアプリケーションの設計と開発について」、著者:「Know-it-all I.N.}})



オブジェクトが正常に作成されると、応答で新しいオブジェクトの識別子を取得します。

これで、 book型の最初のオブジェクトができました。 次に、同じ方法で、オンラインストアに必要なオブジェクトのセットを作成します。



CreateObject(appid、session、「book」、{price:8、名前:「デスクトップアプリケーションの開発」、説明:「シンプルなデスクトップアプリケーションの設計と開発について」、著者:「Vestka EV」}



CreateObject(appid、session、「book」、{price:12、名前:「モバイルアプリケーションの開発」、説明:「携帯電話用アプリケーションの設計と開発について」、著者:「Know-it-all I.N.}})



などなど。 すべてがとても簡単です!



次に、ストアで利用可能な書籍のフォーマット済みリストをユーザーに表示する必要があります。 これはさらに簡単になります。 オブジェクトのセットを選択するには、サービス構造の2つの方法が使用されます。



GetObjects(appid、session、type、from、count)

GetObjectsByCriteria(appid、session、type、criteria、from、count)



GetObjectsメソッド 、オブジェクトを直線的に順次選択するためのものです。 作成の順序に従って選択されたオブジェクトのリストを返します。 つまり、オブジェクトのリストは、識別子(id)の昇順でソートされます。 fromおよびcountパラメーターは、使用するインデックスとその量を示します。これらはオプションのパラメーターです。

例を考えてみましょう。 次のGetObjectsパラメーター(appid、session、「book」)を使用してメソッドを呼び出します

その結果、次の答えが得られます。



{応答:0、書籍:[

{id:1、価格:10.5、名前: "Webアプリケーション開発"、説明: "複雑な1ページのアプリケーションサイトの設計と開発について"、著者: "Know-it-all I.N."}、

{id:2、価格:8、名前:「デスクトップアプリケーションの開発」、説明:「シンプルなデスクトップアプリケーションの設計と開発について」、著者:「Vestka EV」}、

{id:3、{price:12、名前: "モバイルアプリケーションの開発"、説明: "携帯電話用アプリケーションの設計と開発について"、著者: "Know-it-all I.N."}

]}



GetObjectsメソッドの操作非常にシンプルで透過的です。

GetObjectsByCriteriaメソッドの操作を検討してください。 前の方法と比較したこの方法の特徴は、オブジェクトの検索条件を設定できることです。 このメソッドを使用すると、表示されたオブジェクトのリストを柔軟に生成できます。

2つの異なる構文を使用して検索条件を作成できます。 SQL同様のコマンドを使用するか、JSONQL構文を使用します。 使用している基準を生成するための構文を明示的に示す必要はありません。 メソッドは、開発者が使用する構文を自動的に決定します。 SQLおよびJSONQL構文の同じクエリの例を見てみましょう。 たとえば、価格が11未満の書籍のリストを取得します。

SQL検索条件:価格<11



GetObjectsByCriteria(appid、session、「book」、「price <11」)



JSONQLの検索条件:{価格:{'<':11}}



GetObjectsByCriteria(appid、セッション、「book」、「{price:{'<':11}}」)



著者がすべて知っているか、すべて知っている本のリストを取得します。

SQL検索条件:「%Know-it-all%」などの著者または「%Know-nothing%」などの著者



GetObjectsByCriteria(appid、session、「book」、「 '%Know-it-all%'のような著者、または '%Know-nothing%'のような著者」)



JSONQLの検索条件:{author:{like:['%Know-it-all%'、 '%Know-it-all%']}}



GetObjectsByCriteria(appid、session、「book」、{author:{like:['%Know-it-all%'、 '%Know-it-all%']}})



SQLとJSONQLの両方の構文を使用できます。 より便利なものを選択してください。 すべてが明確でSQL構文に精通している場合、JSONQLはHivextプラットフォームの開発時に考案された独自の開発です。 JSONQLについてもう少し詳しく見ていきましょう。 JSONQLを使用して基準を生成するための構文は非常に柔軟で、効果が似ているいくつかのバリエーションがあります。 このような基準の構文をより完全に理解するには、これらの検索基準の形成の原則を詳細に検討してください。 構造サービスはHibernateライブラリに基づいて実装されるため、Hibertnate基準はオブジェクトの検索基準の基礎を形成します。 最後の例を使用して実装を見てみましょう。つまり、著者がKnow-It-AllまたはKnow-It-Allである本のリストを取得します。 Hibertnateは次の構文を使用して基準を定式化します

基準= Restrictions.or(Restrictions.like(「author」、「%Know-it-all%」)、Restrictions.like(「author」、「%Know-all%」));

指定された式をJSONQL構文に変換します。 論理ORによる統一の操作は、配列[...、...]によって決定されます。 このように



[{like:{author: '%Know-it-all%'}}、{like:{author: '%Know-all-%'}}]



すべてが非常にシンプルで透明です。 Recordは、Hibernate構文を実質的に繰り返します。 基準を形成するための同様の可能なアクションオプションを見てみましょう。



{like:[{author: '%Know-It-All%'}、{author: '%Know-It-All%'}]}



別のオプション



{like:{author:['%Know-it-all%'、 '%Know-it-all%']}}



ご覧のとおり、最後のオプションは文字数によって簡素化されており、読みやすくなっています。 ただし、著者によると、さらに読みやすい別のオプションがあります。 条件とフィールド名を入れ替えるだけです



{作者:[{like: '%Know-it-all%'}}、{like: '%Know-it-all%'}]}

{作者:[{like: '%Know-it-all%'}}、{like: '%Know-it-all%'}]}

{author:{like:['%Know-It-All%'、 '%Know-It-All%']}}



最後のオプションが最も読みやすいですが、最後に調べた6つのオプションはすべて機能しており、同じアクションを実行します。 検索基準の形成におけるそのような自由は、基準の形成に大きな柔軟性を与えます。 AND演算を見てみましょう。

著者がKnow-it-AllおよびKnow-It-Allである本のリストを取得します。 Hibertnateの構文は次のとおりです

基準= Restrictions.and(Restrictions.like(「author」、「%Know-it-all%」)、Restrictions.like(「author」、「%Know-it-all%」));

JSONQLでは、AND結合操作は、兄弟オブジェクトのシーケンス{...}、{...}によって決定されます

したがって、JSONQL構文を取得します。



{author:{like: '%Know-It-All%'}}、{author:{like: '%Know-It-All%'}}

{author:{{like: '%Know-it-all%'}}、{like: '%Know-all-%'}}}



可能なJSONQLオプションの広範なセットと、標準SQLを使用したクエリ機能により、基準を使用してオブジェクトをクエリするための非常に柔軟な方法が得られます。

また、構造サービスには、タイプとオブジェクトを管理する他の方法があります。

サービス構造のすべてのメソッドは、ドキュメントで見つけることができます: hivext.ru/index.php/ Structures



コンソール



サービスメソッドの便利な開発とテスト、クエリ条件のテストには、開発者コンソールコードがあります。hivext.ru/ development / APIConsole /#Data.Base



画像



コンソールには、既存のすべてのサービスメソッドのリストがあります。 タイプとオブジェクトを作成するときに、実際の作業でコンソールを試すことができます。



構造サービスのサーバー実装の主要なポイントの1つは、作成されたオブジェクトのデータベーステーブルへの動的マッピングです。 型を決定するとき、サーバー上の型の構造を変更するとき、開発者が定義した型を記述するクラスが自動的に生成されます。 これにより、オブジェクトをテーブルに簡単にマッピングできるだけでなく、オブジェクトを相互接続できます。 1つの記事でサービス構造の実装と構築のすべての原則を説明することは不可能です。 サービスには、キャッシュ、トランザクション、オブジェクトの「遅延」(遅延)ロードなども含まれることを追加します...



サービス構造により、開発したアプリケーションのオブジェクト指向構造を便利かつ柔軟に決定できます。 指定されたサービスには、これらのタイプ(オブジェクト)の必要なタイプとインスタンスを作成、編集、削除、選択するためのメソッドの完全なセットがあります。 また、使用されているORMのおかげで、構造サービスを使用すると、DBMSから抽象化し、オブジェクトを簡単に操作できます。 アクセス権サービスと組み合わせて、アプリケーションのオブジェクト指向アーキテクチャを定義し、オブジェクトへのアクセスのサブジェクトの明確なアクセス権を定義できます。



次の記事では、アクセス権サービスを検討する予定です。これは、本格的なアプリケーションを開発するための主要かつ重要なサービスの1つでもあります。



理解を伴うhabrasocietyがこれらのサービスの分析に近づくことを願っています。 そのようなサービスの実装およびサービスを操作する構文に関する建設的な批判は大歓迎です。



構造サービスのドキュメントhivext.ru/index.php/構造



All Articles