2016-09-06 1 views
0

自分のシステムの一部を整理したいのですが、私のアプリケーションとのやり取りのためのデータ表現に便利なフォームを選択できません。弱く型付けされたオブジェクトのデータベース

Object1 
{ id = TypeId, field1 = value1, otherObjectSpecifedField = value2 ... } 
... 

は(例えば50)多くの種類の(たとえば1000)多くのオブジェクトがあります。次のように は、だから私はdescripted、データオブジェクトのいくつかの地元の「リポジトリ」を持っています。各タイプには固有の固有IDと、独自の記述とフィールドがあります。

次のものは、のそれぞれです。オブジェクトは、このオブジェクトが現在実際に対応しているフィルタセットを持っています。

Filter 
{ filterName1 = filterValue, filterName2 < filterValue } 
Object // filter is applied for this object 
{ ... } 

この「リポジトリ」を使用してのプロセス::私のアプリでは

  1. を私は上からフィルタを意味アプリケーションの状態を、持っていることは、このようになります。 例:アプリケーションのローカライズが可能(EN)(私のアプリケーションは、この値を知っていて、起動時にそれを変更することができます)と私たちはフィルタを持って、「ローカライズ」と命名し、私たちのリポジトリに私たちはこのようにそれを使用することができます: Filter { localization = 'en'} Object1 { ... } // this object i should choose when localization is en

  2. 私のアプリケーションが現実のobectsのセットをチェックすることを決定したとき、それはリポジトリにcamesし、それに尋ねます: "ここでTypeIdとそれぞれのフィルタ+オブジェクトのペアを歩き、フィルタによって実際のオブジェクトが何であるかを言う。いくつかのフィルタ値を解決します(上記の例からのローカリゼーション)私はそれらをあなたのために解決します "。

  3. 次に、リポジトリは各オブジェクトを歩き、実際にはフィルタによって実際に比較されます。そこで、彼はすべてのオブジェクトのすべてのフィルタをチェックし、それらのすべてが実際に実行され、実行時に実行された場合にのみオブジェクトを提供します。現在の実装では

fiters +オブジェクトのこのセットは、アプリケーションからの読み取りに快適で、非常に特定のXML形式のXMLファイルに格納されているが、非常に硬いが、ヒトによって維持します。そして私は、すべてのプロセスを最適化する場所があると思います。私は、オブジェクトを歩き回り、それを他の人と比較することを委任できると思います。 今私はNoSQLのドキュメント指向のデータベースの側面にあると思います。各オブジェクトは独自の構造を持ち、選択ルーチンを使用しているため、必要なものを選択できます。

多分、そのタイプのデータベース構成に関する提案がありますか?そのタイプのデータの特定のデータ構造を知っているかもしれません。

答えて

0

多分私は何かを見逃してしまったかもしれません。あなたには多くの種類のオブジェクトがあります:TypeIdごとに1つのタイプがあります。そうであれば、オブジェクト内のフィールドに一貫した型があると仮定して、これを標準のSQLデータベースで行うことができると思います。そうでない場合は、NoSQLデータベースを使用して行うことができます。

SQLデータベースでは、それぞれのタイプごとに個別のテーブルを使用します(それぞれ独自のフィールドセットを持つため).SQLを使用して適切なテーブルを検索します。

create table Object1 (field1, otherObjectSpecifiedField); 

この表で、それに挿入されたデータを持つことができます:

したがって、たとえば、次の2つのフィールド(私はフィールドの種類を必要としない、ここでのSQLiteを使用しています)を持つテーブルを作成することができます

select * from Object1 where field1 = "field1value"; 

私が述べたように、これはまた、MongoDBのようなNoSQLデータベースで行うことができます。

insert into Object1 values ("field1value", "otherfieldValue"); 

は、フィルタリングは、標準SQLを使用しています。それはMongoのCLIで次のようになります。

テーブルを作成し、最初のオブジェクトを挿入します。

db.test.insert({ id: "TypeId", field1: "value1", otherObjectSpecifedField: "value2"}); 

は、テーブルからオブジェクトを選択:

db.test.find({id: "TypeId", field1: "value1"}); 
/* { "_id" : ObjectId("57cf97060216d33b891615ba"), "id" : "TypeId", "field1" : "value1", "otherObjectSpecifedField" : "value2" } */ 
関連する問題