如何使用 GridDB 在 Laravel 中为聊天消息生成唯一 ID?

问题描述 投票:0回答:1

我正在使用 Laravel 构建一个实时聊天应用程序,并希望使用 GridDB 作为我的数据库,因为它在处理时间序列数据方面具有高性能。由于 GridDB 没有官方的 PHP 客户端,因此我使用 Python 中的中间件 API 来设置自定义集成,以便与 GridDB 进行通信。我的 Laravel 应用程序通过 HTTP 请求与此中间件交互。

在我的聊天应用程序中,每条消息都需要一个唯一的 ID。在像 MySQL 这样的传统关系数据库中,我会使用自动递增整数作为主键。由于 GridDB 本身不支持自动递增 ID,因此我需要一种可靠的方法来为聊天消息生成唯一 ID,以处理高并发性,因为多个用户可能会同时发送消息。

我尝试将当前时间戳与随机数组合:

$messageId = time() . mt_rand(1000, 9999);

这减少了碰撞的机会,但并非万无一失,尤其是在高负载下。

我尝试通过查询最大现有ID并递增它来模拟自动递增:

$maxId = $this->getMaxMessageIdFromGridDB();
$messageId = $maxId + 1;

但是,这种方法在并发环境中并不安全,并且可能导致竞争条件。

使用 GridDB 的 TIMESTAMP 亚秒级精度的行键是否是唯一 ID 的可行选择?

php laravel database uniqueidentifier griddb
1个回答
0
投票

使用 GridDB 的亚秒级精度的 TIMESTAMP 行键对于唯一 ID 来说是一个可行的选择吗?

不。仍然存在碰撞风险。

虽然您可以构建某种序列生成器,但您可能想看看 uniqid()。这仍然不完全安全。如果您计划大规模运行此程序,您可能需要添加主机和/或客户端枚举。

根据您打算运行此程序的位置,您可能需要设置一个熵收集守护进程。

© www.soinside.com 2019 - 2024. All rights reserved.