gpt4 book ai didi

php - 一张嵌套集表可供多个用户使用

转载 作者:行者123 更新时间:2023-11-29 07:36:55 25 4
gpt4 key购买 nike

如果之前有人问过这个问题,我深表歉意,但是我想知道是否有人对为潜在的数千个用户使用一个嵌套集表的性能有任何见解?

我需要每个注册用户都能够创建无限嵌套类别。现在,我的结构是一个 belongsToMany() 关系:

users -> user_categories (pivot) -> categories

用户只能访问自己的类别,无法修改其他用户类别。

一个嵌套集表中(可能)有数万条记录是否会对性能造成巨大影响?每个用户是否应该获得自己的嵌套集类别表?

提前致谢!

最佳答案

嵌套集允许在单个查询中获取节点的所有后代,因此对于读取类别,性能影响将与普通(非嵌套集)表上的性能影响类似。当您插入时,嵌套集的缺点就会出现,因为它需要在插入后更新表中所有记录的左右值。

因此,性能影响将取决于插入的频率以及插入的大小。

如果每个用户有一个根节点,而不是一棵大树,并且全部存储在同一个表中,则可以显着减少开销,因此插入只涉及更新一棵小子树。

如果你想自己测试性能,可以使用 Laravel Baum打包并使用此播种器来查看插入 26*10*3 类别的效果:

<?php

use App\Category;
use Illuminate\Database\Seeder;

class CategoriesTableSeeder extends Seeder
{
public function run()
{
// Helper function to populate model attributes
$node = function () {
$args = implode(' ', func_get_args());

return ['name' => "Category $args"];
};

// Create first level nodes
foreach(range('A', 'Z') as $letter)
{
$node0 = Category::create($node($letter));

// Create second level nodes
foreach(range(1, 10) as $number)
{
$node1 = $node0->children()->create($node($letter, $number));

// Create third level nodes
foreach(['Δ', 'Σ', 'Ω'] as $greek)
{
$node2 = $node1->children()->create($node($letter, $number, $greek));
}
}
}
}
}

关于php - 一张嵌套集表可供多个用户使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30440351/

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