核心数据是一种图形数据库吗?

时间:2015-03-27 06:45:05

标签: ios sqlite core-data graph core

我需要开发一个大型应用程序,需要了解图形数据库概念,链接http://sparsity-technologies.com/UserManual/API.html#transactions.I计划使用核心数据而不是上面的链接框架工作。我想回答以下问题。

1)究竟什么是图形数据库?。解释简单的一般例子。我们用sqlite不能执行。

2)核心数据是否属于关系数据库?解释

3)核心数据是否属于图数据库?但是在苹果文档中他们提到核心数据是用于对象图管理。对象图管理意味着图数据库。如果我想建立关系,那么对象核心数据之间的加权边是否合适?。

2 个答案:

答案 0 :(得分:1)

  

1)究竟什么是图形数据库?。解释一般简单   例如,我们无法用sqlite执行。

好吧,因为这是图灵完成的全部,你可以使用任何其他数据库进行任何数据库操作,真正的问题是效率问题。

在传统的"关系"数据库"关系"只是指向其他表中条目的指针。他们不会固有地传达任何信息,而不是," A连接到B"要捕获和构造比这更复杂的东西,你必须构建大量的伪结构。

A1 - > B1 //例如名字,姓氏

哪个好,但这种关系不一定有倒数,每个表格单元格中的数据也不一定是名字。为了使关系始终有意义,你已经构建了很多逻辑来直接将数据放入表中。把它拿出来同样如此。

在GraphDB中,你有"节点"和"关系"。节点不是表中的条目。它们可以是任意复杂的对象,持久存在与否,并以各种方式持久存在。节点一般模型一些"真实世界"对象就像一个人。

"关系"由于SQL等人之前的意义,GraphDB确实需要另一个术语,因为它们不是简单的指针,而是可以是任意复杂的对象。在名称的节点(简单到实际证明它的方式)

节点名称-A-(之前) - >节点名称-B 节点名称-B-(后面) - >节点名称-B

在sqlite中,要查找名字和姓氏,请查询两个表。在Graph中,您可以获取其中一个节点并跟踪其与其他节点的关系。

(想想看,数学中的图论开始是为了模拟连接组成城市的岛屿的柯尼斯堡的桥梁。所以也许交通地图会是一个更好的例子)

如果城市是节点,那么道路就是关系。道路物体/描述符只是连接两者,但会包含它们自己的逻辑和数据,例如它们的方向,长度,条件,交通,天气的可靠性等等。

当您想要在两个不同节点之间的广泛分离的城市,任何特定时间的节点,交通天气等之间获取和优化路线时,您将从代表起始城市的节点开始并遵循关系/道路-descriptors。在复杂的模型中,任何两个附近的城市节点可能有几条道路在某些情况下最好连接它们。

你需要做的只是比较任何节点之间的关系。这被称为"走图表" 无论整体数据库有多大,您只需要处理第一个节点的关系,例如3,,并完全忽略数以百万计的其他节点和关系。在数据库中。

不能在sqlite中这样做。数据越多,关系越多"你需要处理的越多

  

2)核心数据是否属于关系数据库?解释

不,但如果你哼几个酒吧就可以伪造它。默认情况下,Core Data是一个Object图,这意味着它确实连接了对象/节点,但这些关系本身不是对象,而是由每个Object的类中包含的信息定义。例如。您可以拥有通常的公司,经理和员工的核心数据。

CompanyClass
  set_of_manager_objects
  min_managers==1, max_managers==undefined
  delete_Company_Object_delete_all_manager_objects
  reciprocal_relationship_from_manager_is_company

ManagerClass
  one company object
  min_companies==1, max_companies==1
  delete_manager_object_nullify (remove from set in company class)
  recipocal_relationship_from_company_is_manager

因此,核心数据是一种缺失的链接"在GraphDBs的演变中。我有关系,但他们不是自己的对象。它们位于对象/节点内。关系属性被硬编码到类本身中,只有少数几个,但并非所有值都可以更改。尽管如此,Core Data确实具有走图的优势。在一家公司找到一位经理的员工。您只需从公司对象开始,通过一小组经理找到合适的经理,然后向下走到员工集。即使你有数百家公司,数千名经理和数万名员工。您可以找到一个成千上万的员工中的一个员工。

但是你可以通过创建关系对象并将它们放在任何两个对象/节点之间来伪造GraphDB。因为核心数据允许关系定义的任何子类在相同的关系集中,例如ManagerClass - > LowManager,MidManager,HighManager,您可以在任何给定的类中定义一个简单的关系,然后填充任意复杂的对象,只要它们是子类。这些通常被称为"链接类"或者"链接关系"

正常模式是让链接类与它可能必须链接的两个或更多类有关系(这也是通用的,我已经启动了具有基类的类树,只有关系属性,虽然如果你变得很大,它们会对性能造成损失。)

如果为每个节点/对象提供在单独的基本链接类上定义的几个关系,则可以通过多种方式将相同的节点链接在一起。

  

3)核心数据是否属于图数据库?

不,因为数据库的基本任务是持久性,保存数据。 Core Data的基本任务是对应用程序内部数据的逻辑进行建模。

两件事。例如,当我开始构建Core Data模型时,我开始使用内存存储,通常使用test。模型图是从头开始构建的,每次运行,在内存中,从不接触磁盘。随着它的发展,我将转移到磁盘上的XML存储,因此我可以在必要时进行检查。 XML和二进制存储一次写出并以相同的方式读取。只是,最后我将商店更改为MySQL或自定义。

在GraphDB中,节点,关系和一般图形与永久性AFAK的持久性系统相关联,无法改变。当您走图表时,每次都会执行持久性操作(缓存除外)。

人们常问的问题是何时使用Core Data以及何时在Apple Ecosystem中使用SQL。

答案很简单:

核心数据处理正在运行的应用内部的复杂性。数据模型交互越复杂,您获得Core Data的自由度就越高。

SQL派生解决方案处理大量简单数据。如果应用程序内部的数据模型很少或没有逻辑,那么很多。

如果你的应用程序显示的东西适合一堆索引卡,图书馆书籍记录,棒球卡等,那么SQL解决方案是最好的,因为逻辑只是让特定卡进出持久性。

如果您的应用程序是复杂的矢量绘图应用程序,其中每个文档都是不同的并且具有任意复杂性,或者您正在为V8引擎建模,那么当应用程序运行时,活动数据模型中的大多数逻辑持久性是微不足道的,那么Core Data是更好的选择。

图形数据库正在流行,因为我们的数据真的非常大,而且越来越复杂。我们需要在持久性中对节点关系图中的复杂性进行建模,这样我们就不会咀嚼整个数据库来查找数据,然后必须添加额外的逻辑层

答案 1 :(得分:0)

核心数据只不过是数据模型层,核心数据数据库,远离图形数据库。

核心数据只能帮助您

  • 创建表(实体)
  • 表格中的列(属性)
  • 关系(例如主键,外键,一对一,一对多)

Core Data使用sqlite存储数据并进行查询。

核心数据用于iOS移动应用程序,我相信你想要的是数据库的后端解决方案。