20211204120700_wbws_copy.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. /*
  3. 从旧数据表中提取数据插入到新的表
  4. 插入时用uuid判断是否曾经插入
  5. 曾经插入就不插入了
  6. */
  7. // Require Composer's autoloader.
  8. require_once __DIR__.'/../../vendor/autoload.php';
  9. require_once __DIR__."/../../app/config.php";
  10. require_once __DIR__."/../../env.php";
  11. # 雪花id
  12. $snowflake = new SnowFlakeId();
  13. #user info
  14. $user_db=_FILE_DB_USERINFO_;#user数据库
  15. $user_table=_TABLE_USER_INFO_;#user表名
  16. # 更新数据表
  17. $src_db=_SRC_DB_USER_WBW_;#源数据库
  18. $src_table=_TABLE_SRC_USER_WBW_;#源表名
  19. $dest_db=_FILE_DB_USER_WBW_;#目标数据库
  20. $dest_table=_TABLE_USER_WBW_;#目标表名
  21. echo "migarating wbw".PHP_EOL;
  22. // 开始一个事务,关闭自动提交
  23. $queryInsert = "INSERT INTO ".$dest_table." (
  24. id,
  25. uid,
  26. block_uid ,
  27. book_id,
  28. paragraph,
  29. wid,
  30. word,
  31. data,
  32. status,
  33. creator_uid,
  34. create_time,
  35. modify_time,
  36. created_at,
  37. updated_at) VALUES ( ?,? , ? , ? , ? ,? ,? ,? ,? ,? ,? ,?,to_timestamp(?),to_timestamp(?))";
  38. $commitData = [];
  39. $allInsertCount = 0;
  40. $allSrcCount = 0;
  41. $count = 0;
  42. #从源数据表中读取
  43. $query = "SELECT * FROM ".$src_table." WHERE true ";
  44. $stmtSrc = $PDO_SRC->prepare($query);
  45. $stmtSrc->execute();
  46. while($srcData = $stmtSrc->fetch(PDO::FETCH_ASSOC)){
  47. $allSrcCount++;
  48. #插入目标表
  49. $uuid = $srcData["id"];
  50. #查询目标表中是否有相同数据
  51. $queryExsit = "SELECT id FROM ".$dest_table." WHERE uid = ? ";
  52. $getExist = $PDO_DEST->prepare($queryExsit);
  53. $getExist->execute(array($uuid));
  54. $exist = $getExist->fetch(PDO::FETCH_ASSOC);
  55. if(!$exist){
  56. #没有相同的数据就插入
  57. $commitData[] = array(
  58. $snowflake->id(),
  59. $uuid,
  60. $srcData["block_id"],
  61. $srcData["book"],
  62. $srcData["paragraph"],
  63. $srcData["wid"],
  64. $srcData["word"],
  65. $srcData["data"],
  66. $srcData["status"],
  67. $srcData["owner"],
  68. $srcData["create_time"],
  69. $srcData["modify_time"],
  70. $srcData["create_time"]/1000,
  71. $srcData["modify_time"]/1000
  72. );
  73. $count++;
  74. $allInsertCount++;
  75. if($count === 10000){
  76. $PDO_DEST->beginTransaction();
  77. $stmtDEST = $PDO_DEST->prepare($queryInsert);
  78. foreach ($commitData as $key => $value) {
  79. # code...
  80. $stmtDEST->execute($value);
  81. if (!$stmtDEST || ($stmtDEST && $stmtDEST->errorCode() != 0)) {
  82. $error = $PDO_DEST->errorInfo();
  83. echo "error - $error[2] ";
  84. exit;
  85. }
  86. }
  87. // 提交更改
  88. $PDO_DEST->commit();
  89. echo "finished $count".PHP_EOL;
  90. $count = 0;
  91. $commitData = [];
  92. }
  93. }
  94. if($allSrcCount % 10000 ==0){
  95. echo "find from src table $allSrcCount / $allInsertCount is new.".PHP_EOL;
  96. }
  97. }
  98. if($count>0){
  99. #最后的没有到10000的数据插入
  100. $PDO_DEST->beginTransaction();
  101. $stmtDEST = $PDO_DEST->prepare($queryInsert);
  102. foreach ($commitData as $key => $value) {
  103. # code...
  104. $stmtDEST->execute($value);
  105. if (!$stmtDEST || ($stmtDEST && $stmtDEST->errorCode() != 0)) {
  106. $error = $PDO_DEST->errorInfo();
  107. echo "error - $error[2] ";
  108. exit;
  109. }
  110. }
  111. // 提交更改
  112. $PDO_DEST->commit();
  113. echo "finished $count".PHP_EOL;
  114. }
  115. echo "insert done $allInsertCount in $allSrcCount ".PHP_EOL;
  116. echo "all done".PHP_EOL;