关于OrientDB设计的几个问题

关于OrientDB设计的几个问题,orientdb,Orientdb,我们正在为我们创新的“协作应用程序”寻找最合适的数据库。对不起,我们不知道如何用大家都能理解的方式来命名。事实上,租户、角色、用户、任务和账单之间高度复杂的关系需要有效处理 在阅读了5篇DBs(Postgrel、Mongo、Coach、Arango和Neo4J)之后,当我看到“事物之间的关系比事物本身更重要”这几个词时,我决定深入研究OrientDB。OrientDB的设计理念和创新功能(多模型、集群、面向对象、原生图形、完整图形API、SQL-like、LiveQuery、多主控、审计、简单R

我们正在为我们创新的“协作应用程序”寻找最合适的数据库。对不起,我们不知道如何用大家都能理解的方式来命名。事实上,租户、角色、用户、任务和账单之间高度复杂的关系需要有效处理

在阅读了5篇DBs(Postgrel、Mongo、Coach、Arango和Neo4J)之后,当我看到“事物之间的关系比事物本身更重要”这几个词时,我决定深入研究OrientDB。OrientDB的设计理念和创新功能(多模型、集群、面向对象、原生图形、完整图形API、SQL-like、LiveQuery、多主控、审计、简单RID和版本号……)不断增强我的热情

OrientDB启发我从完全不同的角度重新思考和尝试建模

我们现在正在设计基于OrientDB的数据结构。然而,有一些问题让我困惑

  • 链接与边缘
  • 以一个客户可能下数千个订单为例,如何在链接和边之间选择以存储关系?我更喜欢Edge,但它们似乎在客户记录中存储了数千份RID订单

  • 嵌入式记录的安全性
  • 嵌入式记录是否可以独立于其容器记录进行授权

  • 记录级安全性
  • 激活记录级安全性如何影响查询性能


    希望我表达清楚。任何一句话都会让你感激不尽

    链接与边缘

    如果拱门上没有属性,可以使用链接,如果有链接,可以使用边。如果您需要在两个方向上遍历关系,那么您确实需要边,而使用链接列表时,您只能在一个方向上(就像web上的超链接一样),而不需要边的开销。如果需要遍历图形,边是正确的选择。边需要比链接列表更多的存储空间。它们之间的另一个区别是,如果有两个顶点通过链接a-->(链接)B相互链接,那么如果删除B,链接不会消失,它将保留,但不会指向某个对象。它是这样设计的,因为当您删除一个文档时,查找链接到它的所有其他文档将意味着对数据库进行完整扫描,这通常需要很长时间才能完成。带有双向链接的Graph API是专门为解决这一问题而设计的,因此一般来说,我们建议客户使用该API,或者在应用程序级别小心管理链接一致性

    记录级安全性

    使用一百万个vertex和一个名为Luke的管理员用户,执行如下查询:select from where title=?对于非唯一散列索引,执行时间为0.027秒。 OrientDB具有用户和角色以及记录级安全性的概念。它还支持基于令牌的身份验证,因此可以使用OrientDB作为授权/验证用户的主要手段

    嵌入式记录的安全性

    为了回答你的问题,我举了这个例子

    我有这样的结构:

    如果我想访问嵌入式数据,我必须执行以下命令:
    select prop from User

    因为如果我试图通过包含汽车类型的类访问它,我不会得到任何类型的结果

    select from Car
    

    更新

    OrientDB支持这种授权/身份验证,但与您的示例略有不同。例如:如果用户A在没有管理员权限的情况下插入记录,则另一个用户B在没有管理员权限的情况下无法看到用户A插入的记录。用户只能看到已插入的记录


    希望对您有所帮助

    Hi@Sunrise嵌入式记录的安全性意味着什么?Thx-inadvance@MichelaBonizzi“OrientDB支持两种关系:引用关系和嵌入关系。在使用嵌入关系时,OrientDB将关系存储在嵌入它的记录中。”就我而言,嵌入的记录可能需要独立于它的容器记录进行授权。谢谢!但是,你的回答没有打中我的顾虑:-)对不起,我的英语很差。需要我重新编辑吗?嗨@Michela Bonizzi,非常感谢您的详细和耐心帮助!你能给我更多的指导吗?我已经更新了我的问题供您参考。希望这个更新版本能让我的问题更清楚。嗨@Michela Bonizzi,我明白你的意思了。真的很感谢你!