什么是图数据库?
图数据库旨在将数据之间的关系视为与数据本身同等重要。
为什么图数据库很重要?
因为图擅长处理关系,所以一些数据库以图的形式存储数据。
例子
我们有一个社交网络,其中五个朋友都联系在一起。这些朋友是 Anay、Bhagya、Chaitanya、Dilip 和 Erica。将存储他们的个人信息的图形数据库可能如下所示:
以上示例但使用传统数据库方法
我们现在将使用关系数据库来存储信息。我们很可能使用两张表——一张用于存储每个用户的信息,另一张用于存储用户之间的关系。下面是用户表的样子:
id | first name | last name | phone | |
---|---|---|---|---|
1 | Anay | Agarwal | anay@example.net | 555-111-5555 |
2 | Bhagya | Kumar | bhagya@example.net | 555-222-5555 |
3 | Chaitanya | Nayak | chaitanya@example.net | 555-333-5555 |
4 | Dilip | Jain | dilip@example.net | 555-444-5555 |
5 | Erica | Emmanuel | erica@example.net | 555-555-5555 |
现在,我们还需要另一个表来捕获用户/朋友之间的友谊/关系。我们的友谊表看起来像这样:
user_id | friend_id |
---|---|
1 | 2 |
1 | 3 |
1 | 4 |
1 | 5 |
2 | 1 |
2 | 3 |
2 | 4 |
2 | 5 |
3 | 1 |
3 | 2 |
3 | 4 |
3 | 5 |
4 | 1 |
4 | 2 |
4 | 3 |
4 | 5 |
5 | 1 |
5 | 2 |
5 | 3 |
5 | 4 |
我们将避免深入研究数据库(主键和外键)理论。而只是假设友谊表使用两个朋友的 id。
假设我们这里的社交网络有一个功能,允许每个用户看到他/她朋友的个人信息。因此,如果 Chaitanya 要求提供信息,则意味着她需要有关 Anay、Bhagya、Dilip 和 Erica 的信息。我们将以传统方式(关系数据库)解决这个问题。我们必须首先在 User 表中识别 Chaitanya 的 id:
id | first name | last name | phone | |
---|---|---|---|---|
3 | Chaitanya | Nayak | chaitanya@example.net | 555-333-5555 |
现在,我们将在friends 表中查找user_id 为3 的所有元组。结果关系将是这样的:
user_id | friend_id |
---|---|
3 | 1 |
3 | 2 |
3 | 4 |
3 | 5 |
现在,让我们分析这种关系数据库方法所花费的时间。这将是大约 log(N) 次,其中 N 表示友谊表中的元组数或关系数。在这里,数据库按照 id 的顺序维护行。因此,通常对于“M”个查询,我们的时间复杂度为M*log(N)
只有我们使用图数据库方法,总时间复杂度才会是 O(N)。因为,一旦我们在数据库中找到了 Cindy,我们只需一步即可找到她的朋友。以下是我们的查询将如何执行:
缺点:
请注意,图形数据库并不总是应用程序的最佳解决方案。在决定架构之前,我们需要评估应用程序的需求。