为数据库中的每个ID维护一个字符串队列

时间:2015-09-14 12:38:05

标签: php mysql queue scalability

我有一个MySQL表,其中有一列ID。它是一个自动增量的整数,是表的主键。

我需要为表格中的每一行维护一个字符串(标记)队列(对于你可以说的每个ID,因为这是主键)。

例如: - ID = 1的队列可能是'你好' idontknow'再见'

ID = 2的队列可能是' idontknow',' whoareyou',' bye'

队列的最大长度可以达到10。

在我的服务器上运行的定期脚本每次都会从队列中删除所有ID的成员(字符串)。并将剩余的更新到表中。例如:对于ID = 1,' hello',' idontknow',' bye',' hello'将被删除,更新后的列值将被“忘记”,“再见”。

所有这一切都在大规模发生。只需单击一下,就可以将新成员(字符串)添加到表中所有行的队列中。

管理此问题的最佳方法是什么?我的表中是否有一个列(队列中以逗号分隔的成员字符串),每次都会向队列(列)添加一个成员?在检索时,删除成员并更新列中的更新值。

或者我应该在DB中有单独的表,每个ID都有多行。行将单独包含队列成员。在这种情况下,10k插入可能同时发生。在检索时,10k删除可能同时发生。

你有什么建议?哪种方式更具可扩展性?

第二种方法的数据库结构:

客户表

ID,姓名

现在需要为另一个表中的每个客户维护队列。

队列表

ID(此表的主键),CustomerID(来自客户表的外键), String(队列中成员的字符串)

所以我需要通过CustomerID从队列表中获取。

1 个答案:

答案 0 :(得分:1)

您可以将表格更改为:

id | CusomterID | string
---+------------+----------
 1 |          1 | hello
 2 |          1 | idontknow
 3 |          1 | bye
 4 |          2 | something

然后你的整个表就是队列。它使得读取队列中的下一个作业变得非常简单,并且它使得更新队列变得非常简单。