2016-09-06 105 views
0

我想組織我的系統的某些部分,但我無法選擇方便的數據表示形式來與我的應用進行交互。 所以我有數據對象的一些地方「庫」,descripted如下:弱類型對象的數據庫

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

有許多對象(例如1000)的許多類型(例如50)的。每種類型都有自己的UniqueId和他自己的描述和字段集合。

接下來的事情是,對於每個對象我有一組過濾器,它對應於此對象現在是實際的。它看起來像這樣:

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

使用這個「倉庫」的過程:

  1. 在我的應用程序,我有應用程序的狀態,這意味着過濾器上面。 實例:應用本地化可以「恩」(我的應用程序知道此值,並可以改變它在啓動時),我們有過濾器,名爲「本地化」,並在我們的資料庫,我們可以用這樣的: Filter { localization = 'en'} Object1 { ... } // this object i should choose when localization is en

  2. 當我的應用程序決定檢查哪些obects現在是實際的時候它來到存儲庫並詢問它:「在這裏你需要一個TypeId,並且請遍歷每個過濾器+對象對,並通過過濾器說出實際的對象是什麼,如果你需要解決一些過濾器的價值(從上面的例子本地化),我會爲你解決它們「。

  3. 然後,資源庫遍歷每個對象,並比較哪些是現實的過濾器,哪些不是實際的應用。因此,他檢查每個對象的每個過濾器,並只在所有對象都是實際的並且在運行時執行過的情況下才給出它。

在當前實施這套fiters +對象存儲在XML文件中非常特殊的XML格式,這是從舒適的應用程序來讀取,但很難由人類來維持。我認爲有一些地方可以優化所有流程。我認爲我們可以通過對象遍歷並將其過濾器與其他人進行比較。 現在我想在NoSQL面向文檔的數據庫方面。因爲每個對象都有其獨特的結構,並且可能使用選擇例程,我可以選擇我需要的。

也許有人對這種類型的數據庫組織有什麼建議?也許你知道這種類型的數據的一些特定的數據結構?

回答

0

也許我錯過了一些東西,因爲它看起來像我有很多不同類型的對象:一種是每TypeId。如果是這樣,那麼我認爲這可以用一個標準的SQL數據庫來完成,假設對象中的字段具有一致的類型。如果不是,它仍然可以用NoSQL數據庫完成。

在SQL數據庫中,每種類型都使用一個單獨的表(因爲它們都有自己的一組字段),並使用SQL在相應的表中進行搜索。因此,舉例來說,你可以創建兩個字段的表(我使用SQLite這裏,不需要類型字段):

create table Object1 (field1, otherObjectSpecifiedField); 

這個表可以再有數據插入到它:

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

Filtering使用標準的SQL:

select * from Object1 where field1 = "field1value"; 

正如我提到的,這也可以用的NoSQL數據庫,如MongoDB中完成。這將是這個樣子的蒙戈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" } */