1
johntang824 136 天前 1
navicat 有生成数据的功能
|
2
dddd1919 136 天前 1
先替你司老板捏把汗
|
4
shendaowu OP @johntang824 #1 大佬是给我一个探索的方向还是确定我的问题可以用 navicat 解决?我看了一下 navicat 数据生成的简介,好像没提供复杂的数据生成的工具。
|
5
wangxin3 136 天前 1
先解决表 1 表 2 到表 3 的问题 https://mariadb.com/kb/en/insert-select/
|
6
iyiluo 136 天前 1
需求太多,拆解一下再问 gpt
|
7
levintrueno 136 天前 1
我是写 Java 的,我想我会写代码去生成...
|
8
lyy16384 136 天前 1
测试数据为什么会考虑速度和暂停恢复啊,而且几天写一千万行也太太太小看数据库了
|
9
yb2313 136 天前 1
自己写脚本生成应该可以
|
10
johntang824 136 天前 1
@shendaowu 啊哈,我不是大佬,只是我感觉这个问题可以用 navicat 解决。如果我记得没错,那个数据生成的工具确实可以解决你上述的问题,是不是先生成 tag 和 content 数据,然后 tag_content_rel 数据的其中两个字段从上面两个表随机取,这个表(tag_content_rel)的主键生成即可。
|
11
meshell 136 天前 1
op 试试我这个能不能生成,https://loocode.com/tool/sql-table-data-generator
|
12
qindan 136 天前 1
我觉得 GPT 是能够解决你的问题的,就看你姿势对不对,
|
13
hackhu2019 136 天前 1
我的想法是脚本生成 3 张表对应的 SQL 语句,至于表数据之间的关联关系在生成 SQL 文件的时候就处理好,然后数据库直接执行 SQL 文件,即使几千万的数据应该也是一小时内就搞定了
|
14
hackhu2019 136 天前 1
给你一个参考的 prompts:
假设有如下三个 MariaDB 表:#表结构省略 其中 tag_content_rel 表中的 tag_id 对应 tag 表中的 id ,tag_content_rel 表中的 content_id 对应 content 表中的 id 。 现在我想填充 tag_content_rel 表数据,每行的数据 tag_id 随机从 tag 表获取,content_id 从 content 表获取,请帮我编写一个存储过程,需要 tag_content_rel 包含所有的 tag.id 和 content.id ,考虑写入数据库的效率,需要支持分段写入 |
15
treblex 136 天前 1
laravel 对这块的定义是 seeding 吧,其他的框架很少见做这个的
非要用 gpt 的话,你要先告诉他怎么定义数据,让他生成有关系的结构化数据给你,然后再转 sql |
16
encro 136 天前 1
|
17
pkoukk 136 天前 1
一天写 1000W 行,每秒写入才 115 ,4c8g 的虚机应该都扛得住,没啥好测的
测查询性能,自己写个两段代码写个百八十万行,explain 一下查询语句,看看索引使用正不正确就完事了 剩下的事情,就算要调优也不是你考虑的 |
18
rlds 136 天前 1
你这个需求,navicat 完全能胜任了。
|
19
MoYi123 136 天前 1
几天时间能写入一千万行, 还要考虑利用硬件?
不搞特殊优化的测试数据导入速度是 1 秒 10-20 万. 一千万也就 1 分钟左右. |
20
shendaowu OP |
21
meeop 136 天前 1
1 这个事不适合拿存储过程干,让 ai 写脚本,比如用 python 写,其中 python 可以不直接操作数据库,而是生成 sql,然后你只要导入生成的 sql,导入数据是非常快的,一秒应该能导入 1-10w 行,1000w 行数据也就是 2 分钟,你可以反复折腾
2 看你的需求,无非是给内容挂标签然后测试关联查询性能 这没啥好测试的,这数据关系型数据库最基础能力,只要加好索引,确认执行计划使用索引即可 |
22
encro 136 天前 1
|
23
shendaowu OP @meeop #21 好的,我试试用 Python 。我的需求跟普通的标签有点区别,一次可能需要查询几百的标签,而且大部分查询可能都需要查几百个标签。我之前试过,查询的标签越多好像查询时间越长。
|
24
zouri 136 天前 1
https://github.com/joke2k/faker ,python
|
25
h0099 136 天前 1
首先 19 个月过去了阁下还在折腾这个 https://en.wikipedia.org/wiki/Many-to-many_(data_model) 关系的 https://en.wikipedia.org/wiki/Associative_entity ?并试图继续滥用`提前优化` https://z.n0099.net/#narrow/near/93295 思维精神?
/t/908231 /t/908246 /t/909074 > 要么就是写入过程可以暂停和恢复,这个应该是没法实现的吧? why not? 合理假设您是在 https://en.wikipedia.org/wiki/Cunningham's_Law > 分段写入也可以,通过参数决定写入多少 这跟前面的可暂停本质上是一样的 > 写入速度越快越好,最好可以最大化利用 SSD 建议直接`LOAD csv` https://dev.mysql.com/doc/refman/8.4/en/load-data.html 并在写入前后开关 redolog https://dev.mysql.com/doc/refman/8.4/en/innodb-redo-log.html#innodb-disable-redo-logging > 最好是几天时间能写入一千万行吧。如果没必要的话更少也可以。 一千万行?一千万亿行! --- ```sql CREATE TABLE tag_content_rel( rel_id INT PRIMARY KEY AUTO_INCREMENT, tag_id INT NOT NULL, content_id INT NOT NULL); ``` 为什么不`UNIQUE(tag_id, content_id)`?还是说您的确需要允许出现重复的`(tag_id, content_id)`对? > 我猜如果位置是有规律的可能查询性能会更好 对于将 PK 用做 clustered index (详见 https://github.com/n0099/open-tbm/issues/48#issuecomment-2091811880 的`12.1`)的 mysql innodb storage engine 中的表`tag_content_rel`只有`PRIMARY KEY(rel_id, tag_id, content_id)`后才会符合您的假设 |