serialize/json_encode 到一个字段或将原始数据保留在 db 的多个字段中?

Posted

技术标签:

【中文标题】serialize/json_encode 到一个字段或将原始数据保留在 db 的多个字段中?【英文标题】:serialize/json_encode to one field or keep raw data in many fields of db? 【发布时间】:2014-01-16 04:24:15 【问题描述】:

五天以来,我一直在考虑如何在我的新项目中存储数据。我已经阅读了很多关于序列化或 json_encoding 的优缺点的文章,以及关于搜索包含数千条记录的数据库的文章。这就是问题所在。

考虑我正在制作一个游戏 - 我有数千个位置,每个位置都可能有一些对象。对象的数量是有限的,但我猜每个位置可能有 10-20 个对象。每个对象都有一些属性(如 perks),有时需要检查、更新等,所以我必须将其存储在 db 中。

我看到了两种选择:

简单的数据库方式,使用第一个数据库规范化形式 - 将每个对象作为一行存储在数据库中,将每个属性存储在列中。我可以轻松检索数据,只需一个 ID 即可将其连接到特定位置。问题是 db 中可能(并且将会有)数千行 - 所有对象 * 位置数量,并且搜索它的时间可能非常昂贵。如果你将它乘以同时搜索数据库的玩家数量,它可以杀死数据库。

第二种方法是序列化或 json 编码(甚至 implode somhow)当前位置的所有对象及其所有属性。我猜每个对象可能有 100 个属性 * 20 个序列化的对象可能不是那么小的值数组。所以 2000 (assoc key + int value) 元素被序列化并保存在每个位置的一个字段中。数据库搜索要少得多 - 只需将 id 设置为主键并搜索它,但后来我必须反序列化所有数据。它也可能很昂贵。

我知道我没有在这里放任何代码(还没有)所以这是一个非常虚拟的问题,但我想知道你是否检查过什么是更好的解决方案 - 将大量数据存储在一个文件中但将其序列化或将其分散到多行的数据库中。

希望你能分享你的经验:)

卡雷格。

【问题讨论】:

【参考方案1】:

关系数据库搜索速度非常快。如果设置正确,它也非常灵活。因此,编码过程将是最耗时的因素。 JSON 的好处是服务器-客户端数据传输。就我个人而言,我会使用久经考验的选项 1,但希望尽可能多地在客户端缓存数据,例如html 存储。

我还注意到您正在使用 php。尽管我可能过度阅读了您的标签,但您需要一种具有最少页面重新加载的 AJAX 方法。

【讨论】:

这是真的,我提到了 php,因为服务器端部分将在 php 中完成。剩下的当然是ajax。谢谢你的回答-希望时间能证明选项 1 是一个不错的选择:) 太棒了。我不认为你会后悔选择:)【参考方案2】:

你会想要第一种方法。

【讨论】:

对于初学者来说,当您想要更改对象的工作方式时会发生什么,但现在您必须手动解析大量对象字段以更新它的每个实例,而不是简单的 UPDATE 查询? 如果你真的想要,你可以尝试做一个混合系统;将支持它的数据库全部拆分出来,并有一个缓存层将所有对象存储为一个块。这样你仍然可以很好地更新内容,只需从数据库中重建缓存。

以上是关于serialize/json_encode 到一个字段或将原始数据保留在 db 的多个字段中?的主要内容,如果未能解决你的问题,请参考以下文章

linux下怎么把一个文件复制到另一个文件夹?

linux怎么将一个文件移动到另一个目录下

linux下怎么把一个文件复制到另一个文件夹?

iPhone SDK:切换到一个视图然后返回到前一个视图错误

AD19中如何从一个窗口复制到另一个窗口

linux下怎么把一个文件复制到另一个文件夹