哪种存储此特定数据的方法会更有效?
Which method of storing this particular data would be more efficient?
我有一个现有的游戏数据库 - 目前正在使用 MySQL 来存储信息 - 我希望测试 ArangoDB 以比较速度。
我想知道将玩家的所有信息存储在一个集合中是否会更好,或者将两者分开是否更有效(或者甚至只是更好的做法)。
在 MySQL 中,我真的没有选择,但我使用 ArangoDB。
例如在MySQL中存储库存信息:
+---------------------------+
| user_id | item_id | count |
+---------+---------+-------+
| 1 | 1 | 7 |
| 1 | 2 | 4 |
+---------+---------+-------+
或者在 ArangoDB 中,我可以这样做:
所有信息的单一集合:
{
_key: "Unique User ID",
health: 100,
money: 52.38,
// .... ,
inventory:
{
item1: 7,
item2: 4
// , ....
}
}
将上述集合分成两个不同的部分(一个用于健康、金钱等,一个用于库存数据):
// 'user' collection
{
_key: "Unique User ID",
health: 100,
money: 52.38,
....
}
// 'inventory' collection
{
_key: "Unique User ID",
item1: 7,
item2: 4
// , ....
}
以上两种方法(或者我没想到的另一种)哪一种更有效?
好吧,答案取决于您期望应用程序如何使用数据。这里有一些关于我如何选择如何存储数据的建议:
库存数据是否经常变化,访问用户信息时是否经常需要?如果是这种情况,那么您最好选择选项 1(将库存数据与用户信息一起存储)。
您想让从关系存储到文档存储的转换尽可能轻松吗?然后您可以将选项 2 与单独的集合一起使用。 Arangodb 支持跨集合连接,而且效果很好。
现在,如果您不介意有点学习曲线,我会建议选项 3:图形遍历。在这种情况下,您将以类似于以下的方式存储数据:
//用户顶点集合
{
_键:“1”,
健康:100,
金钱:52.38,
....
}
// item顶点集合
{
项目ID:1,
// , ....
},
{
项目ID:2
// , ....
}
//库存边收集
{
_来自:user
_to: item,
计数:7
},
{
_来自:user
_to: item,
计数:4
}
由于 ArangoDB 本机支持图形遍历,因此上述设置针对真正快速的查找进行了优化。开始从关系数据库迁移到图形数据库时的经验法则是主表成为集合,中间(连接)表成为边缘集合。 (显然还有更多内容,但这是一个好的开始)
如果我从头开始,我可能会先选择选项 3。但是,正如我在开头提到的,这取决于您打算如何使用数据。
我有一个现有的游戏数据库 - 目前正在使用 MySQL 来存储信息 - 我希望测试 ArangoDB 以比较速度。
我想知道将玩家的所有信息存储在一个集合中是否会更好,或者将两者分开是否更有效(或者甚至只是更好的做法)。
在 MySQL 中,我真的没有选择,但我使用 ArangoDB。
例如在MySQL中存储库存信息:
+---------------------------+
| user_id | item_id | count |
+---------+---------+-------+
| 1 | 1 | 7 |
| 1 | 2 | 4 |
+---------+---------+-------+
或者在 ArangoDB 中,我可以这样做:
所有信息的单一集合:
{ _key: "Unique User ID", health: 100, money: 52.38, // .... , inventory: { item1: 7, item2: 4 // , .... } }
将上述集合分成两个不同的部分(一个用于健康、金钱等,一个用于库存数据):
// 'user' collection { _key: "Unique User ID", health: 100, money: 52.38, .... } // 'inventory' collection { _key: "Unique User ID", item1: 7, item2: 4 // , .... }
以上两种方法(或者我没想到的另一种)哪一种更有效?
好吧,答案取决于您期望应用程序如何使用数据。这里有一些关于我如何选择如何存储数据的建议:
库存数据是否经常变化,访问用户信息时是否经常需要?如果是这种情况,那么您最好选择选项 1(将库存数据与用户信息一起存储)。
您想让从关系存储到文档存储的转换尽可能轻松吗?然后您可以将选项 2 与单独的集合一起使用。 Arangodb 支持跨集合连接,而且效果很好。
现在,如果您不介意有点学习曲线,我会建议选项 3:图形遍历。在这种情况下,您将以类似于以下的方式存储数据:
//用户顶点集合
{ _键:“1”, 健康:100, 金钱:52.38, .... }
// item顶点集合
{ 项目ID:1, // , .... },
{ 项目ID:2 // , .... }
//库存边收集
{ _来自:user _to: item, 计数:7 },
{ _来自:user _to: item, 计数:4 }
由于 ArangoDB 本机支持图形遍历,因此上述设置针对真正快速的查找进行了优化。开始从关系数据库迁移到图形数据库时的经验法则是主表成为集合,中间(连接)表成为边缘集合。 (显然还有更多内容,但这是一个好的开始)
如果我从头开始,我可能会先选择选项 3。但是,正如我在开头提到的,这取决于您打算如何使用数据。