sách gpt4 ai đã đi

PHP sử dụng tiện ích mở rộng SWOOLE để đồng bộ hóa dữ liệu MySQL thường xuyên

In lại Tác giả:qq735679552 Thời gian cập nhật: 2022-09-28 22:32:09 27 4
mua khóa gpt4 Nike

CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.

Bài đăng trên blog CFSDN này sử dụng tiện ích mở rộng SWOOLE để đồng bộ hóa MySQL thường xuyên. Dữ liệu được thu thập và sắp xếp theo tác giả. Nếu bạn quan tâm đến bài viết này, vui lòng thích nó.

Công ty Nam Ninh và một số chi nhánh sử dụng hệ thống gọi điện, hiện tại chúng tôi cần phân tích dữ liệu cuộc gọi. Vì máy chủ cuộc gọi của chi nhánh nằm trong mạng nội bộ nên được ánh xạ thông qua các phương tiện kỹ thuật. Mạng giữa chi nhánh và Nam Ninh không ổn định nên chúng tôi cần đồng bộ hóa dữ liệu cuộc gọi của chi nhánh với Nam Ninh.

Cách đơn giản nhất là cấu hình trực tiếp chức năng đồng bộ hóa chủ-tớ của MySQL để đồng bộ dữ liệu tới Nam Ninh. Nhưng công ty ở hệ thống bán hàng đó không cấp cho chúng tôi quyền mysql. Vì vậy, phương pháp này đã phải bị loại bỏ.

Vì vậy, chúng tôi chỉ nghĩ đến việc sử dụng PHP để triển khai một công cụ đồng bộ hóa thời gian PHP đơn giản, sau đó tiến trình PHP chạy ở chế độ nền, vì vậy trước tiên chúng tôi đã đưa ra một thành phần PHP: Swoole. Sau khi thảo luận, lượng dữ liệu tối đa mà công ty chi nhánh tạo ra trong nửa ngày là khoảng 5.000, vì vậy giải pháp này khả thi, vì vậy chúng ta hãy thực hiện.

Chúng tôi sử dụng PHP Swoole để tạo hệ thống tác vụ theo thời gian không đồng bộ.

Đồng bộ hóa chủ-tớ của cơ sở dữ liệu MySQL là đồng bộ dữ liệu với cơ sở dữ liệu tớ bằng cách phân tích cú pháp nhật ký nhị phân trong cơ sở dữ liệu chủ. Tuy nhiên, khi sử dụng PHP để đồng bộ hóa dữ liệu, chúng ta chỉ có thể truy vấn dữ liệu từ cơ sở dữ liệu chính theo từng đợt rồi chèn vào cơ sở dữ liệu phụ ở Nam Ninh.

Framework chúng tôi sử dụng ở đây là thinkphp 3.2.

Đầu tiên cài đặt tiện ích mở rộng PHP: swoole. Vì không sử dụng hàm đặc biệt nào nên chúng tôi sử dụng pecl để cài đặt nhanh tại đây.

?
1
pecl cài đặt swoole

Sau khi cài đặt hoàn tất, thêm extension="swoole.so" vào php.ini. Sau khi cài đặt hoàn tất, chúng ta sử dụng phpinfo() để kiểm tra xem cài đặt có thành công không.

PHP sử dụng tiện ích mở rộng SWOOLE để đồng bộ hóa dữ liệu MySQL thường xuyên

Cài đặt thành công, chúng ta bắt đầu viết bài.

Phía máy chủ.

1. Trước tiên hãy khởi động một máy chủ nền và lắng nghe cổng 9501.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
công cộng Chức năng chỉ số()
{
  $phục vụ = mới \swoole_máy chủ( "0.0.0.0" , 9501);
  $phục vụ ->đặt([
   'worker_num' => 1, //Thông thường được đặt thành 1-4 lần số lượng CPU máy chủ
   'task_worker_num' => 8, //Số lượng tiến trình tác vụ
   'biến thành quỷ dữ' => 1, //Thực hiện như một tiến trình daemon
   'yêu cầu tối đa' => 10000, //Số lượng yêu cầu tối đa
   "task_ipc_mode" => 2 //Sử dụng giao tiếp hàng đợi tin nhắn và đặt nó ở chế độ cạnh tranh
  ]);
  $phục vụ ->trên( 'nhận được' , [ $cái này , 'nhận được' ]); //Nhận nhiệm vụ và giao chúng
  $phục vụ ->trên( 'nhiệm vụ' , [ $cái này , 'đang làm nhiệm vụ' ]); //Bạn có thể xử lý các tác vụ theo phương pháp này
  $phục vụ ->trên( 'hoàn thành' , [ $cái này , 'hoàn thành' ]); //Được gọi khi nhiệm vụ hoàn thành
  $phục vụ ->bắt đầu();
}

2. Tiếp nhận và chuyển giao nhiệm vụ.

?
1
2
3
4
5
6
7
8
9
công cộng Chức năng nhận được( $phục vụ , $fd , $từ_id , $dữ liệu )
{
  //Sử dụng json_decode để phân tích dữ liệu tác vụ
  $khu vực = json_giải_giải( $dữ liệu ,ĐÚNG VẬY);
  foreach ( $khu vực BẰNG $diện tích ){
   //Cung cấp các tác vụ không đồng bộ
   $phục vụ ->nhiệm vụ( $diện tích );
  }
}

3. Thực hiện tác vụ, dữ liệu được truy vấn từ cơ sở dữ liệu chính và ghi vào cơ sở dữ liệu phụ.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
công cộng Chức năng đang làm nhiệm vụ( $phục vụ , $nhiệm_vụ , $từ_id , $nhiệm_vụ_dữ_liệu )
{
  $diện tích = $nhiệm_vụ_dữ_liệu ; //Tham số là mã vùng
  $hàng = 50; //Có bao nhiêu mục trên một trang
  //Địa chỉ cơ sở dữ liệu chính, chuyển đổi kết nối cơ sở dữ liệu chính theo số vùng tham số ($area)
  //Slave mysql instance, chuyển đổi kết nối cơ sở dữ liệu slave theo tham số area ($area) number
  //Vì chương trình nằm trong bộ nhớ nên kết nối mysql có thể sử dụng kết nối dài và sau đó được sử dụng lại. Để sử dụng chế độ thiết kế, bạn có thể sử dụng chế độ nhóm đối tượng
  mã số......
 
  //Cơ sở dữ liệu chính là cơ sở dữ liệu của công ty chi nhánh, và cơ sở dữ liệu phụ là cơ sở dữ liệu phụ sau khi dữ liệu được đồng bộ hóa với Nam Ninh
  mã số......
 
  //Sử dụng $sql để lấy giá trị tự động tăng tối đa từ cơ sở dữ liệu: select max(id) as maxid from ss_cdr_cdr_info limit 1
  $slavexincrementid = ...;
 
  //Sử dụng $sql để lấy giá trị tự động tăng lớn nhất trong cơ sở dữ liệu chính: select max(id) as maxid from ss_cdr_cdr_info limit 1
  $mastermaxincrementid = ...;
 
  //Nếu chúng bằng nhau thì chúng sẽ không đồng bộ
  nếu như ( $slavexincrementid >= $mastermaxincrementid ){
   trở lại SAI;
  }
 
  // Tính số trang dựa trên số mục nhập
  $datanumber = trần nhà ( $mastermaxincrementid - $slavexincrementid );
  $mỗisố = trần nhà ( $datanumber / $hàng );
  $trái = 0;
 
  //Viết theo từng đợt theo số trang, nhớ dọn dẹp bộ nhớ kịp thời
  ( $tôi = 0; $tôi < $mỗisố ; $tôi ++) {
   $trái = $tôi == 0 ? $slavexincrementid : $trái + $hàng ;
   $đúng = $trái + $hàng ;
   //Tạo điều kiện truy vấn hàng loạt
   //$where = "id > $left và <= $right";
   $masterdata = ...; //Truy vấn dữ liệu từ cơ sở dữ liệu chính
   $slavelastinsertid = ...; //Chèn vào thư viện phụ
   bỏ đặt( $masterdata , $slavelastinsertid );
  }
 
  tiếng vọng "asynctask mới[id=$task_id]" .php_eol;
  $phục vụ ->kết thúc( "$area -> ok" );
}

4. Được gọi khi nhiệm vụ hoàn thành.

?
1
2
3
4
công cộng Chức năng kết thúc( $phục vụ , $nhiệm_vụ , $nhiệm_vụ_dữ_liệu )
{
  tiếng vọng "asynctask[$task_id] kết thúc: $task_data" .php_eol;
}

Nhiệm vụ đẩy của khách hàng.

Về cơ bản thì đã hoàn tất, phần còn lại là viết lệnh đẩy tác vụ cho máy khách.

?
1
2
3
4
5
6
7
8
9
10
11
công cộng Chức năng chỉ số()
{
  $khách hàng = mới \swoole_client(swoole_sock_tcp);
  nếu như (! $khách hàng ->kết nối( '127.0.0.1' , 9501, 1)) {
   ném mới ngoại lệ( 'Lỗi khi kết nối với dịch vụ swoole' );
  }
  $khu vực = mã hóa json([ 'liễu châu' , 'yulin' , 'Bắc Hải' , 'quế lâm' ]);
  //Bắt đầu kiểm tra duyệt
  $khách hàng ->gửi( $khu vực );
  tiếng vọng "Nhiệm vụ đã được gửi thành công" .php_eol;
}

Bây giờ về cơ bản chúng ta đã hoàn tất. Việc còn lại là viết một tập lệnh shell để thực thi nó thường xuyên: /home/wwwroot/sync_db/crontab/send.sh.

?
1
2
3
4
5
6
#!/thùng/bash
đường dẫn=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
đường dẫn xuất khẩu
 
# Lên lịch đẩy các tác vụ đồng bộ hóa dữ liệu không đồng bộ
/usr/bin/php /home/wwwroot/sync_db/server.php trang chủ/index/index

Sử dụng tác vụ theo lịch trình crontab, chúng tôi thêm tập lệnh vào các tác vụ theo lịch trình.

?
1
2
3
4
#Đặt tác vụ đồng bộ dữ liệu được thực hiện vào lúc 12:30 hàng ngày
30 12 * * * gốc /home/wwwroot/sync_db/crontab/send.sh
#Đặt tác vụ đồng bộ dữ liệu được thực hiện vào lúc 19:00 hàng ngày
0 19 * * * gốc /home/wwwroot/sync_db/crontab/send.sh

Mẹo: Bạn nên thêm thao tác ghi nhật ký để biết liệu tác vụ có được đẩy và thực thi thành công hay không.

Về cơ bản thì đã hoàn thành, chương trình cần được tối ưu hóa~~~, vui lòng đề xuất những phương pháp tốt hơn.

Liên kết gốc: https://cong5.net/post/php-swoole-sync-call-data-for-subsidary-to-nanning.

Cuối cùng, bài viết này về việc sử dụng tiện ích mở rộng SWOOLE trong PHP để đạt được đồng bộ hóa theo thời gian của dữ liệu MySQL kết thúc tại đây. Nếu bạn muốn biết thêm về việc sử dụng tiện ích mở rộng SWOOLE trong PHP để đạt được đồng bộ hóa theo thời gian của dữ liệu MySQL, vui lòng tìm kiếm các bài viết trên CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

27 4 0
qq735679552
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com