php - 序列化/json_encode 到一个字段或将原始数据保留在数据库的多个字段中?

标签 php mysql json performance serialization

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

假设我正在制作游戏 - 我有数千个位置,每个位置都可能有一些对象。对象的数量是有限的,但我猜每个位置可能有 10-20 个对象。每个对象都有一些属性(如特权),有时需要检查、更新等,因此我必须将其存储在数据库中。

我看到两个选项:

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

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

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

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

卡尔雷格。

最佳答案

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

我还注意到您使用的是 PHP。页面重新加载最少的 AJAX 方法是您想要的,尽管我可能过度阅读了您的标签。

关于php - 序列化/json_encode 到一个字段或将原始数据保留在数据库的多个字段中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20819970/

相关文章:

php - 使用 $.post 将 JS 变量发送到 PHP 脚本

php - python 后端有什么用途?

php - 使用带有where条件的Mysql查询

javascript - 将 JSON 数据链接到 d3 中的 g 元素

java - 使用 moshi 格式化 json

php - 更新最近的更新 - 程序中的问题 - 还有其他方法吗?

php - 如何在 php 中打印 ñ

sql - 在子选择中引用外部字段值?

MYSQL 联合并合并重复行中的金额

java - Jackson库的ANDROID使用: How to load object with indexes - range from to