有关创建PHP-MySQL后台任务的建议

时间:2011-12-23 19:57:17

标签: php mysql database-design

我正在寻找关于我正在构建的东西的建议:我有一个PHP应用程序,可以创建,更新和删除记录,但它紧密集成在一个传统的非基于SQL的数据库中,它真的很慢当你开始做很多数据库调用时。 我想为用户提供更多的后台体验,这样当用户创建或编辑某些内容时,需要将所有变量,数组和对象写入MySQL数据库,然后开始后台脚本来阅读这些内容。记录并将请求处理到旧数据库。

所以我需要一个跟踪任务的表,然后是另一个跟踪所有变量,对象,数组及其值的表。

以下是我认为第二个表的DB结构必须是:

  • 存储task_id的列
  • 如果var是数组或对象,则存储的列;如果是简单的var,则存储为NULL。
  • 用于存储数组/对象var。
  • 的名称的列
  • 如果它是一个对象的列,则存储它所对象的类型。
  • 用于存储阵列/对象组ID的列。 (用于跟踪哪些变量属于对象/数组)
  • 用于在对象/数组
  • 中存储简单var,方法或名称的列
  • 用于存储var
  • 值的列

以下是一些例子:

1 | NULL     | NULL        | NULL          | NULL | 'foo'        | 'bar'
1 | 'array'  | 'foo_array' | NULL          | 1    | 'foo'        | 'bar'
1 | 'array'  | 'foo_array' | NULL          | 1    | 'foo2'       | 'bar2'
1 | 'object' | 'foo_obj'   | foobar_object | 2    | 'foo_method' | 'bar'
1 | 'object' | 'foo_obj'   | foobar_object | 2    | 'bar_method' | 'foo'

这看起来像是一种过于复杂的方法吗?我是疯了还是在想这个?有人会想到一个更好的方法吗?

感谢。

2 个答案:

答案 0 :(得分:3)

使用serialize()

它将生成一个特殊格式的字符串(您可以存储在您的数据库中)。该字符串是特殊的,unserialize()可以将其转换回其原始的php值。它维护变量类型,值和结构。自定义对象和多维数组都没有问题。

你仍然需要你的数据库表的一部分,这只是为你做了很多工作,而且做得很好。

答案 1 :(得分:1)

我会创建一个具有主键(或许是task_id)的表,然后创建一个列来存储变量的序列化哈希值(或者可能是json编码的)。您甚至可以将其存储在跟踪任务的原始表中。我假设该表的状态列的值为:

等待, 处理, 完成,和 错误

当我们在家里这样做时,我们只使用一个tinyint(1)无符号列。您还可以在创建,启动和完成任务时添加时间戳字段或三个。一旦你开始滚动,这一切都非常简单。