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 Show 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 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ạiNế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ư 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 3s cũng chẳng ích gì. Bạn có thể cần phải 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ớiTạ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 MySQLVớ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
Không có gì bất thường cho đến phần 5Trong MySQL, bạn có thể phân vùng theo ________ 06, ________ 07, ________ 08, ________ 09 và 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àoNhững cái bắt đầu bằng 01 nên dễ hiểu. Mỗi phân vùng chứa các giá trị mà cột 02 nhỏ hơn ngày của ngày hôm sau. Điều này cũng có nghĩa là 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ẹpPhân vùng 04 và 05 cần được giải thích. 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 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. 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ị 09 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 11 ở đó, thì nó sẽ kết thúc ở phân vùng 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ỗiKhi 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ù
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
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 0Như 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 & MySQLHã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 1Thự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 13 Hàng đầu tiên là 7 14 tạo một chuỗi từ 5 đến -2 (không bao gồm giá trị cuối cùng) -> 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 ( 16) và giới hạn của nó ( 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ệnhVí dụ xóa dữ liệu quy mô lớn với MySQL và Node. jsBâ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, 18 lấy danh sách các phân vùng hiện tại rồi chuyển nó cho 19 4Trước tiên, chúng tôi chọn tất cả các phân vùng hiện có từ bảng 70 được duy trì bởi MySQLSau đó, 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 71 là tập hợp các phân vùng tồn tại và 72 là tập hợp các phân vùng nên tồn tại thì 73 74 75 tạo tập hợp 72 2Việ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 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 78 theo thời gianLấy kịch bản này làm ví dụ
Hàm 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 0Bâ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 1Chú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 2Phương thức này tạo câu lệnh 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 0gói nó lênNhư 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ả |