Nodejs luồng Mysql

Nút. js là thời gian chạy JavaScript hướng sự kiện không đồng bộ và hiệu quả nhất khi xây dựng các ứng dụng mạng có thể mở rộng. Nút. js không có khóa, vì vậy không có cơ hội khóa chết bất kỳ quy trình nào. & dự án ví dụ về MySQL, chúng ta sẽ xem xét cách bạn có thể xử lý hiệu quả hàng tỷ hàng chiếm hàng trăm gigabyte dung lượng lưu trữ

Mục tiêu phụ của tôi với bài viết này là giúp bạn quyết định xem Node. js + MySQL phù hợp với nhu cầu của bạn và để cung cấp trợ giúp triển khai giải pháp như vậy

Bạn có thể tìm thấy mã thực tế mà chúng tôi sẽ sử dụng trong suốt bài đăng trên blog này trên GitHub

Tại sao nút. js và MySQL?

Chúng tôi sử dụng MySQL để lưu trữ dữ liệu theo dõi phân tán của người dùng trên Nút của chúng tôi. js Công cụ theo dõi và gỡ lỗi được gọi là Trace

Chúng tôi chọn MySQL, vì tại thời điểm quyết định, Postgres không thực sự giỏi trong việc cập nhật hàng, trong khi đối với chúng tôi, việc cập nhật dữ liệu bất biến sẽ phức tạp một cách vô lý. Hầu hết mọi người đều nghĩ rằng nếu ai đó có hàng triệu/tỷ hàng thì nên sử dụng giải pháp NoSQL như Cassandra hoặc Mongo

Rất tiếc, các giải pháp này không tuân thủ ACID khiến chúng khó sử dụng khi tính nhất quán của dữ liệu là vô cùng quan trọng

Tuy nhiên, với việc lập chỉ mục tốt và lập kế hoạch phù hợp, MySQL có thể phù hợp với nhiệm vụ như các giải pháp thay thế NoSQL đã đề cập ở trên

MySQL có một số công cụ lưu trữ. InnoDB là ứng dụng mặc định, có nhiều tính năng nhất. Tuy nhiên, người ta nên tính đến việc các bảng InnoDB là bất biến, nghĩa là mọi câu lệnh 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
1 sẽ sao chép tất cả dữ liệu vào một bảng mới. Nó sẽ làm cho vấn đề trở nên tồi tệ hơn khi có nhu cầu di chuyển một cơ sở dữ liệu đã tồn tại

Nếu bạn có các giá trị danh nghĩa, mỗi giá trị có nhiều dữ liệu liên quan — e. g. mỗi người dùng của bạn có hàng triệu sản phẩm và bạn có rất nhiều người dùng — có lẽ cách dễ nhất là tạo bảng cho từng người trong số họ và đặt tên cho họ như 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
2. Bằng cách này, bạn có thể giảm đáng kể kích thước của các bảng riêng lẻ

Ngoài ra, việc xóa dữ liệu của người dùng trong trường hợp xóa tài khoản là thao tác O(1). Điều này rất quan trọng, bởi vì nếu bạn cần xóa một lượng lớn giá trị khỏi các bảng lớn, MySQL có thể quyết định sử dụng chỉ mục sai hoặc hoàn toàn không sử dụng chỉ mục.

Việc bạn không thể sử dụng gợi ý chỉ mục cho 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
3s cũng chẳng ích gì. Bạn có thể cần phải 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
4 bảng của mình để xóa dữ liệu, nhưng điều đó có nghĩa là sao chép từng hàng sang một bảng mới

Tạo bảng cho mỗi người dùng rõ ràng làm tăng thêm độ phức tạp, nhưng nó có thể là một chiến thắng lớn khi loại bỏ người dùng hoặc các thực thể tương tự với lượng dữ liệu liên quan khổng lồ

Tuy nhiên, trước khi sử dụng các bảng được tạo động, bạn nên thử xóa các hàng theo khối vì nó cũng có thể hữu ích và dẫn đến ít phức tạp hơn. Tất nhiên, nếu bạn có dữ liệu đến nhanh hơn mức bạn có thể xóa, bạn có thể gặp khó khăn với giải pháp đã nói ở trên

Nhưng điều gì sẽ xảy ra nếu các bảng của bạn vẫn còn rất lớn sau khi phân vùng chúng theo người dùng và bạn cũng cần xóa các hàng đã lỗi thời? . Trong trường hợp này, bạn nên thử tính năng phân vùng bảng tích hợp sẵn của MySQL. Nó rất hữu ích khi bạn cần cắt các bảng của mình theo các giá trị được xác định theo thang thứ tự hoặc liên tục, chẳng hạn như dấu thời gian tạo

Phân vùng bảng với MySQL

Với MySQL, một bảng được phân vùng sẽ hoạt động như thể nó là nhiều bảng, nhưng bạn có thể sử dụng cùng một giao diện mà bạn đã quen, trong khi không cần logic bổ sung từ phía ứng dụng. Điều này cũng có nghĩa là bạn có thể loại bỏ các phân vùng như thể bạn loại bỏ các bảng

Tài liệu này rất hay, nhưng cũng khá dài dòng (xét cho cùng, đây không phải là một chủ đề đơn giản), vì vậy, hãy xem nhanh cách bạn nên tạo một bảng được phân vùng

Cách chúng tôi xử lý các phân vùng của mình được lấy từ bài đăng của Rick James về chủ đề này. Anh ấy cũng đưa ra một số thông tin chi tiết về cách bạn nên lập kế hoạch cho các bảng của mình

CREATE TABLE IF NOT EXISTS tbl (
      id INTEGER NOT NULL AUTO_INCREMENT,
      data VARCHAR(255) NOT NULL,
      created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (id, created_at)
    )

PARTITION BY RANGE (TO_DAYS(created_at)) (
        start        VALUES LESS THAN (0),
        from20170514 VALUES LESS THAN (TO_DAYS('2017-05-15')),
        from20170515 VALUES LESS THAN (TO_DAYS('2017-05-16')),
        from20170516 VALUES LESS THAN (TO_DAYS('2017-05-17')),
        future       VALUES LESS THAN MAXVALUE
    );

Không có gì bất thường cho đến phần

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
5

Trong MySQL, bạn có thể phân vùng theo ________ 06, ________ 07, ________ 08, ________ 09 và 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
00 bạn có thể đọc về chúng trong tài liệu. Lưu ý rằng khóa phân vùng phải là một phần của khóa chính hoặc bất kỳ chỉ mục duy nhất nào

Những cái bắt đầu bằng 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
01 nên dễ hiểu. Mỗi phân vùng chứa các giá trị mà cột 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
02 nhỏ hơn ngày của ngày hôm sau. Điều này cũng có nghĩa là 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
03 chứa tất cả dữ liệu cũ hơn 2012-04-15, vì vậy đây là phân vùng mà chúng tôi sẽ loại bỏ khi thực hiện dọn dẹp

Phân vùng 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
04 và 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
05 cần được giải thích.
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
04 giữ các giá trị cho những ngày chúng tôi chưa xác định. Vì vậy, nếu chúng tôi không thể chạy phân vùng lại kịp thời, thì tất cả dữ liệu đến vào
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
07 hoặc muộn hơn sẽ kết thúc ở đó, đảm bảo rằng chúng tôi không bị mất bất kỳ dữ liệu nào.
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
05 cũng đóng vai trò như một mạng lưới an toàn. Chúng tôi hy vọng tất cả các hàng có giá trị 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
09 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
02, tuy nhiên, chúng tôi cần chuẩn bị cho các lỗi có thể xảy ra. Nếu vì lý do nào đó, một hàng kết thúc bằng 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
11 ở đó, thì nó sẽ kết thúc ở phân vùng 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
05 , đây là dấu hiệu cho thấy chúng tôi cần thực hiện một số sửa lỗi

Khi bạn sử dụng phân vùng, MySQL sẽ giữ dữ liệu đó trên các phần riêng biệt của đĩa như thể chúng là các bảng riêng biệt và tự động sắp xếp dữ liệu của bạn dựa trên khóa phân vùng

Có một số hạn chế được đưa vào tài khoản mặc dù

  • Bộ đệm truy vấn không được hỗ trợ
  • Khóa ngoại không được hỗ trợ cho các bảng InnoDB được phân vùng
  • Các bảng được phân vùng không hỗ trợ các chỉ mục hoặc tìm kiếm FULLTEXT

Còn rất nhiều thứ nữa, nhưng đây là những thứ mà chúng tôi cảm thấy hạn chế nhất sau khi áp dụng các bảng được phân vùng tại RisingStack

Nếu bạn muốn tạo một phân vùng mới, bạn cần sắp xếp lại một phân vùng hiện có và chia nhỏ nó để phù hợp với nhu cầu của bạn

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);

Bỏ phân vùng mất một bảng thay đổi, nhưng nó chạy như thể bạn bỏ một bảng

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
0

Như bạn có thể thấy, bạn phải bao gồm tên thực và mô tả của các phân vùng trong các câu lệnh. Chúng không thể được tạo động bởi MySQL, vì vậy bạn phải xử lý nó trong logic ứng dụng. Đó là những gì chúng tôi sẽ đề cập tiếp theo

Ví dụ phân vùng bảng với Node. js & MySQL

Hãy xem giải pháp thực tế. Đối với các ví dụ ở đây, chúng tôi sẽ sử dụng knex, một trình tạo truy vấn cho JavaScript. Trong trường hợp bạn đã quen thuộc với SQL, bạn sẽ không gặp vấn đề gì khi hiểu mã

Đầu tiên, hãy tạo bảng

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
1

Thực tế nó giống như câu lệnh mà chúng ta đã thấy trước đó, nhưng chúng ta phải tạo tên và mô tả của các phân vùng một cách linh hoạt. Đó là lý do tại sao chúng tôi tạo ra phương thức 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
13 

Hàng đầu tiên là

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
7

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
14 tạo một chuỗi từ 5 đến -2 (không bao gồm giá trị cuối cùng) -> 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
15, sau đó chúng tôi trừ các giá trị này khỏi thời điểm hiện tại và tạo tên của phân vùng (
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
16) và giới hạn của nó (
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
17). Thứ tự rất quan trọng vì MySQL đưa ra lỗi nếu các giá trị để phân vùng không tăng liên tục trong câu lệnh

Ví dụ xóa dữ liệu quy mô lớn với MySQL và Node. js

Bây giờ chúng ta hãy từng bước xem xét việc xóa dữ liệu. Bạn có thể xem toàn bộ mã tại đây

Phương thức đầu tiên, 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
18 lấy danh sách các phân vùng hiện tại rồi chuyển nó cho 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
19

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
4

Trước tiên, chúng tôi chọn tất cả các phân vùng hiện có từ bảng 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
70 được duy trì bởi MySQL

Sau đó, chúng tôi tạo tất cả các phân vùng sẽ tồn tại cho bảng. Nếu 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
71 là tập hợp các phân vùng tồn tại và 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
72 là tập hợp các phân vùng nên tồn tại thì

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
73

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
74

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
75 tạo tập hợp 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
72

CREATE TABLE IF NOT EXISTS tbl (
      id INTEGER NOT NULL AUTO_INCREMENT,
      data VARCHAR(255) NOT NULL,
      created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (id, created_at)
    )

PARTITION BY RANGE (TO_DAYS(created_at)) (
        start        VALUES LESS THAN (0),
        from20170514 VALUES LESS THAN (TO_DAYS('2017-05-15')),
        from20170515 VALUES LESS THAN (TO_DAYS('2017-05-16')),
        from20170516 VALUES LESS THAN (TO_DAYS('2017-05-17')),
        future       VALUES LESS THAN MAXVALUE
    );
2

Việc tạo các đối tượng phân vùng khá giống với việc tạo câu lệnh 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
77 . Điều quan trọng nữa là kiểm tra xem phân vùng chúng ta sắp tạo có cũ hơn phân vùng cũ nhất hiện tại không. có thể chúng tôi cần thay đổi 
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
78 theo thời gian

Lấy kịch bản này làm ví dụ

Hãy tưởng tượng rằng người dùng của bạn bắt đầu với 7 ngày lưu giữ dữ liệu nhưng có tùy chọn nâng cấp lên 10 ngày. Ban đầu, người dùng có các phân vùng bao gồm các ngày theo thứ tự sau.

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
79. Sau khoảng một tháng, người dùng quyết định nâng cấp. Các phân vùng bị thiếu trong trường hợp này.
ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
40

Khi dọn dẹp, tập lệnh hiện tại sẽ cố gắng sắp xếp lại phân vùng 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
04 cho các phân vùng bị thiếu nối thêm chúng sau phân vùng hiện tại

Việc tạo phân vùng cho các ngày cũ hơn -7 ngay từ đầu không có ý nghĩa gì vì dù sao thì dữ liệu đó cũng được dự định sẽ bị loại bỏ và nó cũng sẽ dẫn đến một danh sách phân vùng trông giống như 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
42 không tăng lên một cách đơn điệu, do đó

Hàm 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
43 của MySQL tính toán số ngày đã trôi qua kể từ năm 0 ngày 1 tháng 1, vì vậy chúng tôi sao chép hàm này trong JavaScript

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
0

Bây giờ chúng ta có các phân vùng phải loại bỏ và các phân vùng phải được tạo, trước tiên hãy tạo phân vùng mới cho ngày mới

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
1

Chúng tôi chỉ cần chuẩn bị một câu lệnh cho (các) phân vùng mới được tạo

Chúng tôi chạy tập lệnh này hàng giờ chỉ để đảm bảo không có gì sai sót và chúng tôi có thể thực hiện việc dọn dẹp đúng cách ít nhất một lần một ngày

Vì vậy, điều đầu tiên cần kiểm tra là liệu có phân vùng nào được tạo không. Điều này chỉ xảy ra ở lần chạy đầu tiên, sau đó là 23 lần một ngày

Chúng tôi cũng phải loại bỏ các phân vùng lỗi thời

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
2

Phương thức này tạo câu lệnh 

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
44 giống như chúng ta đã thấy trước đó

Và cuối cùng, mọi thứ đã sẵn sàng cho việc tổ chức lại

ALTER TABLE tbl
	REORGANIZE PARTITION future INTO (
		from20170517 VALUES LESS THAN (TO_DAYS('2017-05-18')),
		from20170518 VALUES LESS THAN (TO_DAYS('2017-05-19')),
		PARTITION future VALUES LESS THAN MAXVALUE
);
0

gói nó lên

Như bạn có thể thấy, trái ngược với niềm tin phổ biến, các giải pháp DBMS tuân thủ ACID như MySQL có thể được sử dụng khi bạn đang xử lý một lượng lớn dữ liệu, vì vậy bạn không nhất thiết phải từ bỏ các tính năng của cơ sở dữ liệu giao dịch

Tuy nhiên, việc phân vùng bảng đi kèm với khá nhiều hạn chế, nghĩa là bạn không thể sử dụng tất cả sức mạnh mà InnoDB cung cấp để giữ cho dữ liệu của bạn nhất quán. Bạn cũng có thể phải xử lý trong logic ứng dụng những gì khác sẽ có sẵn, chẳng hạn như ràng buộc khóa ngoại hoặc tìm kiếm toàn văn

Tôi hy vọng bài đăng này giúp bạn quyết định xem MySQL có phù hợp với nhu cầu của bạn hay không và giúp bạn triển khai giải pháp của mình. Cho đến lần sau. kỹ thuật vui vẻ

có thể nút. js giao tiếp với MySQL?

Khi bạn đã thiết lập và chạy MySQL trên máy tính của mình, bạn có thể truy cập nó bằng cách sử dụng Nút. js . Để truy cập cơ sở dữ liệu MySQL bằng Node. js, bạn cần có trình điều khiển MySQL.

MySQL có hỗ trợ phát trực tuyến không?

Sao chép luồng MySQL hoạt động trên cơ sở nhật ký nhị phân . Đây là những tệp chứa nhật ký của tất cả các hoạt động xảy ra trong phiên bản MySQL. Thiết lập sao chép luồng MySQL liên quan đến việc định cấu hình cơ sở dữ liệu nguồn để bật nhật ký nhị phân và sau đó định cấu hình nô lệ để sử dụng nó làm nguồn dữ liệu.

Làm cách nào để truyền dữ liệu từ MySQL?

Truyền trực tuyến dữ liệu cơ sở dữ liệu của bạn có thể có nhiều ứng dụng. .
Bước 1) Lệnh Máy khách hoặc Phía Máy khách. .
Bước 2) Máy chủ MySQL phản hồi với 4 khả năng gói. .
Bước 3) Hãy tập trung vào Tập kết quả