在MySQL中存储图形是一个好主意吗?

10

我正在使用MySQL存储来自工具的报告。用户可以非常快速和灵活地查询数据,这让我非常满意。该工具还包含一些图形数据。我的问题是,在MySQL中存储图形数据是否是一个好主意?图形中的节点和边数达到了数百万级别,并且查询通常是图形遍历。


不确定您所说的图形是什么意思。如果只是一些数据,并在查询时转换为图形,则存储在mysql中。如果您要存储某些图形,例如gif文件,则这取决于您的喜好和编程语言。Delphi?Java?Perl?php?桌面应用程序?Web应用程序?除非您提供更多信息,否则很难给出建议。 - Weiyan
一般来说,我会说不行。但这取决于你的查询。Mysql显然没有搜索路线等的实现,而在处理图形时可能需要或不需要。如果你只需要在有限的深度(如5-10)中进行搜索,我想mysql是可以的。但再次强调,这真的取决于你想要用图形进行哪种类型的查询动态更改 - vbence
错误的图形排序。 - Orbling
你的图表能表示为层次结构吗? - orangepips
OP在谈论图形数据结构。http://en.wikipedia.org/wiki/Graph_(data_structure) 面向图形的DBMS产品将数据组织成记录和指向记录的指针。这种数据结构对程序员来说非常熟悉。 - Walter Mitty
3个回答

5

MySQL并不是专门为图形数据库而创建和优化的。您可能想尝试Neo4J,它是一个很好的图形数据库。


4

通常,纯粹的SQL语句并不适合操作图形数据结构。但是,有一些技术可以对其进行索引。

例如,如果您的数据不需要频繁更新,使用GRIPP索引将使您能够非常好地处理图遍历查询。后者让您能够以更或多或少固定的时间回答关于父子关系和深度相关的查询,而不管图的节点数或链接密度如何。


1
或者,你可以索引图表...哦等等。 ^_^ +1 - Angad

2

一般来说,SQL数据库不能很好地处理图形数据。问题在于,要进行图形遍历操作,您要么需要在一个查询中将整个图形加载到内存中,然后对其进行操作和更改,要么需要执行大量的连接操作以逐个节点遍历图形,这变得非常缓慢。对于您所关注的规模的图形,最好使用图形数据库或使用像REDIS这样的内存数据库作为快速缓存层,然后将其持久化到后台。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接