问题我问过 ChatGPT 了,3.5 和 4 都问过,一直没试出来满意的代码。
假设有如下三个 MariaDB 表:
CREATE TABLE tag(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
description VARCHAR(1000));
CREATE TABLE content(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
description VARCHAR(1000));
CREATE TABLE tag_content_rel(
rel_id INT PRIMARY KEY AUTO_INCREMENT,
tag_id INT NOT NULL,
content_id INT NOT NULL);
其中 tag_content_rel 表中的 tag_id 对应 tag 表中的 id ,tag_content_rel 表中的 content_id 对应 content 表中的 id 。
再假设第一个表和第二个表都填充了足够数量的数据。现在请编写一个 MariaDB 过程,将第三个表填充为类似下面的数据:
rel_id,tag_id,content_id
0,0,0
1,1,0
2,2,0
3,3,0
4,4,1
5,1,1
6,2,1
7,3,1
8,5,2
9,1,2
10,2,2
11,3,2
12,1,3
13,3,3
14,4,3
15,5,3
16,0,4
17,2,4
18,3,4
19,4,4
20,10,5
21,16,5
22,17,5
23,18,5
24,11,6
25,16,6
26,17,6
27,18,6
28,12,7
29,16,7
30,17,7
31,18,7
32,10,8
33,11,8
34,17,8
35,18,8
简单说就是将 tag_content_rel 表填充为每个 content 都有一些 tag 相似的 content 。tag 相似的 content 为一组。设计出的 MariaDB 过程可以通过一些参数调整一共有多少组 content ,每个 content 有多少个 tag ,每组 content 有多少个 content 。
请考虑一下写入数据库的效率,写入速度越快越好,最好可以最大化利用 SSD 。要么就是写入过程可以暂停和恢复,这个应该是没法实现的吧?分段写入也可以,通过参数决定写入多少。最好是几天时间能写入一千万行吧。如果没必要的话更少也可以。
另外有没有可能用两个极端的测试数据集来模拟上面的测试数据?比如一个测试数据集 tag_id 和 content_id 都是完全随机的,而另外一个测试数据集每个 tag_id 和 content_id 组合都会重复若干次。这两个测试数据集都是在两个数据库中的,分别进行查询性能测试。如果二者查询性能都可以的话,是否就能确定我上面列的数据例子对应的模式的查询性能也是可以的?另外第二个有没有什么方法让每个 tag_id 和 content_id 组合的实际位置是随机的?我猜如果位置是有规律的可能查询性能会更好。完全随机的数据集我已经试过了,查询性能我比较满意。每个组合都重复若干次并且位置不固定我不会写。这个我好像没问过 ChatGPT 。
如果感觉太麻烦的话,我可以付 30 元钱。穷,更多给不起。不过能白嫖我肯定是更愿意白嫖的,我穷我不要脸。
假设有如下三个 MariaDB 表:
CREATE TABLE tag(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
description VARCHAR(1000));
CREATE TABLE content(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
description VARCHAR(1000));
CREATE TABLE tag_content_rel(
rel_id INT PRIMARY KEY AUTO_INCREMENT,
tag_id INT NOT NULL,
content_id INT NOT NULL);
其中 tag_content_rel 表中的 tag_id 对应 tag 表中的 id ,tag_content_rel 表中的 content_id 对应 content 表中的 id 。
再假设第一个表和第二个表都填充了足够数量的数据。现在请编写一个 MariaDB 过程,将第三个表填充为类似下面的数据:
rel_id,tag_id,content_id
0,0,0
1,1,0
2,2,0
3,3,0
4,4,1
5,1,1
6,2,1
7,3,1
8,5,2
9,1,2
10,2,2
11,3,2
12,1,3
13,3,3
14,4,3
15,5,3
16,0,4
17,2,4
18,3,4
19,4,4
20,10,5
21,16,5
22,17,5
23,18,5
24,11,6
25,16,6
26,17,6
27,18,6
28,12,7
29,16,7
30,17,7
31,18,7
32,10,8
33,11,8
34,17,8
35,18,8
简单说就是将 tag_content_rel 表填充为每个 content 都有一些 tag 相似的 content 。tag 相似的 content 为一组。设计出的 MariaDB 过程可以通过一些参数调整一共有多少组 content ,每个 content 有多少个 tag ,每组 content 有多少个 content 。
请考虑一下写入数据库的效率,写入速度越快越好,最好可以最大化利用 SSD 。要么就是写入过程可以暂停和恢复,这个应该是没法实现的吧?分段写入也可以,通过参数决定写入多少。最好是几天时间能写入一千万行吧。如果没必要的话更少也可以。
另外有没有可能用两个极端的测试数据集来模拟上面的测试数据?比如一个测试数据集 tag_id 和 content_id 都是完全随机的,而另外一个测试数据集每个 tag_id 和 content_id 组合都会重复若干次。这两个测试数据集都是在两个数据库中的,分别进行查询性能测试。如果二者查询性能都可以的话,是否就能确定我上面列的数据例子对应的模式的查询性能也是可以的?另外第二个有没有什么方法让每个 tag_id 和 content_id 组合的实际位置是随机的?我猜如果位置是有规律的可能查询性能会更好。完全随机的数据集我已经试过了,查询性能我比较满意。每个组合都重复若干次并且位置不固定我不会写。这个我好像没问过 ChatGPT 。
如果感觉太麻烦的话,我可以付 30 元钱。穷,更多给不起。不过能白嫖我肯定是更愿意白嫖的,我穷我不要脸。