【问题标题】:OrientDB graph database design: storing properties on edge vs nodesOrientDB 图数据库设计:在边缘与节点上存储属性
【发布时间】:2015-11-24 19:35:43
【问题描述】:

我正在使用 OrientDB 存储有关视频租赁的信息。我将成员和电影表示为节点。每当会员借一部电影时,我都会在他们之间添加一个优势。该数据集有用户多次借阅电影。此外,我还需要存储租借电影的月份/季节(仍在决定哪个适合我们的需要,但除此之外)。我打算将上述细节存储在边缘。但我遇到了这个: http://orientdb.com/docs/2.1/Performance-Tuning-Graph.html

并且建议避免在边缘存储属性。我想知道我是否应该改变我的方法?如果是,那还有什么选择?

提前致谢。

【问题讨论】:

    标签: orientdb graph-databases


    【解决方案1】:

    我认为在您的情况下,您可能会选择直接在边缘创建属性。存储与租赁相关的数据的另一种方法是在 Member 和 Movies 之间创建第三个节点(例如 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”属性直接存储在“borrows”边缘,以将成员与借用的电影相关联,我认为您可以像我一样做到这一点。

    【讨论】:

      【解决方案2】:

      来自您提供的同一个链接:

      使用架构

      从 OrientDB 2.0 开始,如果在 schema 中声明了字段, 字段名称本身不存储在文档/顶点/边中。这个 提高性能并节省大量磁盘空间。

      source

      【讨论】:

        猜你喜欢
        • 2016-05-17
        • 2015-05-23
        • 1970-01-01
        • 2016-04-18
        • 2014-10-19
        • 1970-01-01
        • 2015-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多