gpt4 book ai didi

mysql - 用于存储词典列表的数据库

转载 作者:可可西里 更新时间:2023-11-01 11:16:16 24 4
gpt4 key购买 nike

我需要一种方法将以下结构存储在数据库中。上下文是我有一个包含资源列表的表,我需要能够在执行操作时锁定该表以防止并发写入。

项目编号:abcd锁定:错误资源: [ { 资源:CPU 可用名额:50 已用配额:35},{ 资源:StaticIps 可用名额:70 已用配额:45 }]

我想过将其放入 MySQL 数据库中,但想不出一种合适的方式来嵌套列表,以便我们可以锁定“ProjectId”字段。

任何指向允许这种形式的数据结构嵌套的数据库/数据存储的指针?

最佳答案

在 MySQL 中,您可以构建一个包含以下列的表。

ProjectId         VARCHAR(100)
ResourceName VARCHAR(100)
AvailableQuota INT
UsedQuota INT

ProjectId 和 ResourceName 列是复合主键。

然后你可以使用dbms transactions来序列化你表中数据的使用。如果您想做的只是阅读,而不是更改,您可以做的资源

   BEGIN TRANSACTION;
SELECT ResourceName, AvailableQuota, UsedQuota
FROM table
WHERE ProjectId = 'whatever'
LOCK IN SHARE MODE;
/* do whatever you need to do */
COMMIT;

另一方面,如果您需要更改数据,则可以执行此类操作。

   BEGIN TRANSACTION;
SELECT ResourceName, AvailableQuota, UsedQuota
FROM table
WHERE ProjectId = 'whatever'
FOR UPDATE;
/* do whatever you need to do */
UPDATE table SET AvailableQuota=AvailableQuota - 10,
UsedQuota=UsedQuota + 10
WHERE ProjectId = 'whatever' AND ResourceNme = 'something'
COMMIT;

当您使用这些时 so-called Locking Reads in a transaction这样,其他 MySQL 客户端将等到您发出提交操作。

为此避免使用 MyISAM 表;他们不支持交易。

关于mysql - 用于存储词典列表的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47916368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com