在我的应用程序中,大多数In (user_id、classroom_id、post_id、assessment_id等)都是公开可用的,这意味着它们要么位于URL中,要么位于目录的名称中。出于安全考虑,我希望每个表都有10个字符随机ID,而不是自动递增的。
我可以使用时间戳,但这并不是唯一的,如果添加随机数,它将变得更长(例如,我需要添加4个随机数来处理每秒最多10.000 DB的插入到表中.纯粹的假设是不能扩展的)。
现在我更愿意创建一个10字符随机ID,这将给我100亿个可能的ID组合。因此,生成复制的机会非常小,长度也是可以接受的。
use Keygen;
$id = Keygen::numeric(10)->generate();你觉得我的想法有道理吗?是否有人知道使用10个字符主ID是否会对我的DB性能产生负面影响?谢谢!
发布于 2019-05-21 14:21:46
发布于 2019-05-21 14:03:37
发布于 2019-05-21 15:35:59
你可以使用UUID。我建议您使用默认的方法来生成UUID。关于如何实现这一点,请参见下文。
use Illuminate\Support\Str;
$uuid = Str::uuid()->toString(); //this generates a v4 UUID.在您的迁移中,您可以指定这样一个uuid列;
**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->uuid('id')->primary(); //uuid field set to PK
});
}在您的模型中,例如User.php,设置以下属性。
protected $primaryKey = 'id';
public $incrementing = false;
protected $keyType = 'string';我建议您在表中保留一个自动增量列,以帮助您在不写任何查询的情况下确定记录的数量(这是可选的)。例如:假设这样的列是rowId,您可以通过将它添加到模型上的隐藏属性数组中来隐藏它。例如:
protected $hidden = [
'password', 'remember_token', 'rowId'
];希望这能帮上忙。
https://stackoverflow.com/questions/56239494
复制相似问题