首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel主自动增量替代方案

问Laravel主自动增量替代方案
EN

Stack Overflow用户
提问于 2019-05-21 13:33:46
回答 3查看 3.6K关注 0票数 1

在我的应用程序中,大多数In (user_id、classroom_id、post_id、assessment_id等)都是公开可用的,这意味着它们要么位于URL中,要么位于目录的名称中。出于安全考虑,我希望每个表都有10个字符随机ID,而不是自动递增的。

我可以使用时间戳,但这并不是唯一的,如果添加随机数,它将变得更长(例如,我需要添加4个随机数来处理每秒最多10.000 DB的插入到表中.纯粹的假设是不能扩展的)。

现在我更愿意创建一个10字符随机ID,这将给我100亿个可能的ID组合。因此,生成复制的机会非常小,长度也是可以接受的。

代码语言:javascript
复制
use Keygen;

$id = Keygen::numeric(10)->generate();

你觉得我的想法有道理吗?是否有人知道使用10个字符主ID是否会对我的DB性能产生负面影响?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-21 14:21:46

我可以为ID生成推荐三个包。

  1. Webpatser's Laravel UUID包 允许为您的模型生成UUID,非常容易设置和使用。这种类型的in是不可预测的,可能被认为更安全,但不能在数据库中排序。Github
  2. Vinkla's Laravel Hashids包 保留当前的ids,并获取一个可以解密的散列,以便公开混淆这些ids。Github
  3. Hafael's Laraflake软件包 Twitter雪花类id生成,性能好,功能更好,id可以排序。Github

您可以查看所有三个可用的包,并选择一个,或者您可以做出一个DIY解决方案的灵感来源。

票数 5
EN

Stack Overflow用户

发布于 2019-05-21 14:03:37

你最好用UUID代替。

您使用什么数据库类型?大多数数据库类型支持UUID类型,并且可以自动生成它们,这样您就不必自己生成它们了。

退房:uuid

票数 1
EN

Stack Overflow用户

发布于 2019-05-21 15:35:59

你可以使用UUID。我建议您使用默认的方法来生成UUID。关于如何实现这一点,请参见下文。

代码语言:javascript
复制
use Illuminate\Support\Str;

$uuid = Str::uuid()->toString(); //this generates a v4 UUID.

在您的迁移中,您可以指定这样一个uuid列;

代码语言:javascript
复制
**
 * 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,设置以下属性。

代码语言:javascript
复制
protected $primaryKey = 'id';

public $incrementing = false;

protected $keyType = 'string';

我建议您在表中保留一个自动增量列,以帮助您在不写任何查询的情况下确定记录的数量(这是可选的)。例如:假设这样的列是rowId,您可以通过将它添加到模型上的隐藏属性数组中来隐藏它。例如:

代码语言:javascript
复制
protected $hidden = [
    'password', 'remember_token', 'rowId'
];

希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56239494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档