2015-11-24 99 views
1

我正在使用OrientDB存儲有關視頻租賃的信息。我代表成員和電影作爲節點。每當一個成員借用一部電影,我就在它們之間添加一條邊。該數據集有多次用戶借用電影。此外,我需要存儲在哪個月/季節(仍然決定哪些將滿足我們的需求,但除此之外)是租用的電影。我打算在邊緣存儲上述細節。但我碰到這個: http://orientdb.com/docs/2.1/Performance-Tuning-Graph.htmlOrientDB圖形數據庫設計:在邊緣vs節點上存儲屬性

而且建議避免邊緣存儲屬性。我想知道我是否應該改變我的方法?如果是,那麼有什麼選擇?

在此先感謝。

回答

1

我認爲你的情況你可能會選擇直接在邊緣創建屬性。存儲與出租有關的數據的替代方案是在成員和電影之間創建第三個節點(例如RentalData),並使用PK和FK字段,但它與關係數據庫類似,不是必需的。

我複製一個小DB:

create class Member extends V; 
create property Member.id integer; 
create property Member.name string; 
create property Member.surname string; 
create index Member.id unique; 


create class Movie extends V; 
create property Movie.id integer; 
create property Movie.title string; 
create property Movie.minutes integer; 
create index Movie.id unique; 

create class borrows extends E; 
create property borrows.rentaldate Datetime; 

create vertex Member set id = 1, name = "Paul", surname = "Green"; 
create vertex Member set id = 2, name = "John", surname = "Smith"; 
create vertex Member set id = 3, name = "Frank", surname = "Redding"; 

create vertex Movie set id = 1, title = "Interstellar", minutes = 170; 
create vertex Movie set id = 2, title = "The Gladiator", minutes = 176; 

create edge borrows from (select from Member where id = 1) to (select from Movie where id = 1) set rentaldate = sysdate(); 
create edge borrows from (select from Member where id = 1) to (select from Movie where id = 2) set rentaldate = sysdate(); 
create edge borrows from (select from Member where id = 2) to (select from Movie where id = 2) set rentaldate = sysdate(); 
create edge borrows from (select from Member where id = 3) to (select from Movie where id = 1) set rentaldate = sysdate(); 
create edge borrows from (select from Member where id = 3) to (select from Movie where id = 2) set rentaldate = sysdate(); 

我直接存儲上的優勢「rentaldata」屬性「借用」的成員借電影聯繫起來,我想你可以做到這一點跟我一樣。

0

從您提供的同樣的鏈接:

使用模式

從OrientDB 2.0開始,如果字段在模式中聲明, 字段名稱未存儲在文件/頂點/邊他們自己。這 提高性能,並節省磁盤上的大量空間。

source