我正在尝试向测试数据库中添加大量点击量,以测试我的仪表盘指标显示。因此,我想生成2.5万个点击量,并将它们与数据库中的随机
我最初尝试在
我不确定这是如何可能的——是否有我错过的优化?请注意,我不能只生成1-x之间的随机整数并将其用作链接的
以下是运行时间很长的种子程序:
Post
相关联,以使数据保持一致。我最初尝试在
HitFactory
类中抓取一个随机的Post
,但这非常缓慢(如几千个点击需要数小时)。然后我把随机部分移到种子类中,并只进行了一次调用以最小化数据库访问,认为这会显著加快速度。但事实并非如此——创建单个Hit
对象仍需要至少5-10秒钟。我不确定这是如何可能的——是否有我错过的优化?请注意,我不能只生成1-x之间的随机整数并将其用作链接的
Post
,因为我正在使用UUID样式ID来管理posts
表。以下是运行时间很长的种子程序:
use Illuminate\Database\Seeder;
class HitsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$posts = App\Post::all();
$i = 0;
while ($i <= 25000) {
$post = $posts->random();
factory(App\Hit::class)->create(
[
'post_key' => $post->post_key,
'subject_code' => $post->subject_code,
'subject_id' => $post->subject_id,
]
);
$i++;
}
}
}
编辑:我还尝试了在HitsTableSeeder
中生成1-500之间的随机整数,并将其用作$posts
集合的索引,以完全消除random()
调用。 这仍然比我能想象的要慢。
while ($i <= 25000) {
$t = rand(0, 500);
$post = $posts[$t];
HitsTableSeeder
的while
循环中递增$i
? - Nikola Gavricchunk()
方法将这个巨大的数组分割成较小的部分。 - Tpojkacreate
仍然需要被调用 25k 次,不是吗? - user101289