SQL so với NoQuery – Bạn nên sử dụng cái nào cho Dự án tiếp theo?

Một trong những câu hỏi thường gặp nhất – tôi nên sử dụng cơ sở dữ liệu nào


SQL là viết tắt của Ngôn ngữ truy vấn có cấu trúc. Nó được phát triển lần đầu tiên vào những năm 1970 bởi một nhóm các nhà nghiên cứu của IBM, mặt khác, cơ sở dữ liệu NoQuery, được sử dụng lần đầu tiên vào năm 1998 bởi Carlo Strozzi.

Sự khác biệt phổ biến nhất giữa hai hệ thống cơ sở dữ liệu (DB) này là SQL là quan hệ và NoQuery không liên quan.

Hãy để sâu vào hai cơ sở dữ liệu này để thông báo quyết định của bạn tốt hơn khi tiếp theo bạn đang xem xét cơ sở dữ liệu cho dự án của mình.

Cấu trúc cơ sở dữ liệu

Hãy nói chuyện về cấu trúc.

SQL

SQL cơ sở dữ liệu có cấu trúc lược đồ xác định.

Một lược đồ chứa các bảng và mỗi bảng chứa một số lượng cột nhất định. Điều đó có nghĩa là người dùng không thể cập nhật bảng vượt quá số lượng cột được chỉ định trong bảng. Điều này đặc biệt hữu ích khi bạn cần duy trì tính toàn vẹn dữ liệu và cũng để đảm bảo loại dữ liệu được lưu vào cơ sở dữ liệu của bạn.

Mỗi bảng trong cơ sở dữ liệu SQL có thể liên quan. tức là, bạn có thể có mối quan hệ giữa các bảng. Những mối quan hệ này có thể là Một đến Nhiều, Nhiều đến Nhiều hoặc Một với Một. Loại mối quan hệ bạn thực hiện phụ thuộc vào những gì bạn yêu cầu.

Chẳng hạn, hãy để Lôi xem xét tình huống giả định; chúng tôi có một công ty với người dùng và người dùng có thể đặt hàng cho các sản phẩm. Sau đó, chúng tôi có thể quyết định rằng người dùng có thể tạo nhiều đơn hàng, nhưng mỗi đơn hàng chỉ có thể được tạo bởi một người dùng. Đây sẽ là một đến nhiều mối quan hệ, tức là, một người dùng cho nhiều đơn hàng. Do đó, cấu trúc bảng cho cả hai bảng sẽ trông giống như bên dưới.

Trong DB của chúng tôi, chúng tôi có thể có một bảng người dùng, được cấu trúc như dưới đây,

user_table
—————————————————-
id | tên | e-mail
—————————————————–
1 Idris [email được bảo vệ]

Ngoài ra, chúng tôi có thể có một bảng đơn đặt hàng

order_table
———————————————————————————
id | user_id | số thứ tự
———————————————————————————
1 1 20000001

User_id trên bảng đơn hàng, giúp bạn dễ dàng ánh xạ từng đơn hàng trên bảng đơn hàng đến người dùng mà nó thuộc về. Trong trường hợp có mối quan hệ Một đối một, chúng tôi cũng có thể có order_id trên users_table nếu chúng tôi quyết định lấy người dùng theo id đơn hàng liên quan của nó.

Đối với, Nhiều đến nhiều tình huống, một bảng phụ, được gọi là bảng Pivot, thường được tham gia. Điều này cho phép nhiều bản ghi được ánh xạ với nhau. Sử dụng ví dụ trên. Chúng ta sẽ có,

user_table
————————————————————————————-
id | tên | e-mail
————————————————————————————-
1 Idris [email được bảo vệ]

và bảng thứ tự sẽ là

order_table
———————————————————
id | số thứ tự
———————————————————
1 2000001

và sau đó bảng Pivot sẽ giữ cả hai ID làm khóa ngoại.

users_nings_table
——————————————————————————
id | order_id | tên người dùng
——————————————————————————
1 1 1

Dựa trên cấu trúc này do SQL cung cấp, bạn có thể thoải mái viết Joins giữa các bảng sẽ cung cấp dữ liệu từ các bảng khác nhau được nối với nhau trong một truy vấn.

NoQuery

NoQuery cơ sở dữ liệu được xây dựng để linh hoạt hơn so với SQL DB, cũng để chứa lượng dữ liệu lớn hơn.

Trong DB của NoQuery, không có lược đồ hoặc bảng được xác định trước. Có Bộ sưu tập, và trong mỗi Bộ sưu tập, có Tài liệu. Điều này cho phép bạn lưu dữ liệu ở các dạng khác nhau khi chúng đến. Bạn có thể chọn để có nhiều tài liệu khác nhau với các trường khác nhau trong một Bộ sưu tập. Cũng có thể giả mạo quan hệ giữa các Bộ sưu tập. Tuy nhiên, chúng không phù hợp cho mục đích như vậy. Thay vào đó, bạn có thể lưu tất cả những gì cần thiết cho một truy vấn vào cùng một Bộ sưu tập.

Nếu bạn là một người SQL, bạn có thể nghĩ Bộ sưu tập là bảng và Tài liệu là hàng với các bảng. Tuy nhiên, không có hạn chế nào đối với các cột dữ liệu bạn có thể thêm vào bảng.

Quay trở lại trường hợp giả định được xác định trước đó của chúng tôi về một công ty có người dùng và đơn đặt hàng.

Bộ sưu tập người dùng có thể được định nghĩa là,

{id: 1, tên: ‘idris’, email: ‘[email được bảo vệ]‘}

Và Bộ sưu tập Đơn hàng có thể được định nghĩa là,

{id: 1, order_number: 2000001, user_id: 1}

Tuy nhiên, trong trường hợp này, chúng tôi muốn tránh phải tham gia thủ công cả hai Bộ sưu tập (mà chúng tôi không nên, trong trường hợp này). Chúng tôi có thể lưu các mục vào Bộ sưu tập được đọc nhiều nhất. Tôi đã quyết định (ví dụ này) sẽ là bộ sưu tập Đơn hàng.

{id: 1, order_number: 200001, người dùng {id: 1, tên: ‘idris’, email: ‘[email được bảo vệ]‘}}

Trong trường hợp này, chúng tôi không còn cần phải đọc từ Bộ sưu tập người dùng và chỉ đọc từ Bộ sưu tập đơn hàng, hiện chứa tất cả dữ liệu chúng tôi cần.

Một điều quan trọng cần lưu ý ở đây: Nếu bạn đang xây dựng một ứng dụng đọc nhiều hơn viết, thì tùy chọn NoQuery có thể phù hợp với bạn hơn. Bởi vì bạn có thể lưu tất cả dữ liệu của mình trên cùng một bộ sưu tập và bạn có thể đọc từ nguồn đó một cách thoải mái để có được tất cả dữ liệu cần thiết.

Tuy nhiên, đối với một ứng dụng đòi hỏi phải ghi nhiều (khoảng 10.000 lần ghi mỗi giây) ở tỷ lệ đó, không nên có tùy chọn NoQuery khi bạn cần ghi cùng một dữ liệu vào nhiều vị trí. Trong tình huống này, một tùy chọn SQL có thể phù hợp hơn, trong đó bạn có các mối quan hệ tồn tại với tất cả các bảng và cùng một dữ liệu không cần phải ghi vào nhiều vị trí, việc cập nhật dữ liệu ở một vị trí có thể có sẵn cho các bảng khác thông qua thoát mối quan hệ. Tất nhiên, điều này không có nghĩa là mỗi cơ sở dữ liệu này không thể xử lý quy mô.

Thu nhỏ

Hãy cùng khám phá cách hoạt động của quy mô.

SQL

SQL DB không thể được thu nhỏ theo chiều ngang mà chỉ theo chiều dọc. Điều này thậm chí còn có ý nghĩa gì?

Chia tỷ lệ theo chiều ngang có nghĩa là chia dữ liệu từ một DB vào nhiều cơ sở dữ liệu để giảm tải. Tuy nhiên, dữ liệu SQL không thể được phân tách trên các DB riêng biệt do tính chất nghiêm ngặt của nó. Cách thích hợp để mở rộng SQL DB là tăng không gian CPU, Bộ nhớ và Đĩa của máy chủ DB hiện tại và đây là ý nghĩa của việc chia tỷ lệ theo chiều dọc.

tỉ lệ ngang

tỉ lệ dọc


NoQuery

Các DB NoQuery có thể được thu nhỏ theo cả chiều ngang và chiều dọc. Điều này là do sự linh hoạt trong lưu trữ dữ liệu của nó. Do đó, điều này cho phép dữ liệu của nó được phân chia trên nhiều cơ sở dữ liệu, như trường hợp với tỷ lệ ngang. Nó cũng có thể được thu nhỏ theo chiều dọc nếu cần.

Một điều quan trọng cần lưu ý ở đây: Khi nói đến việc mở rộng quy mô, cả Cơ sở dữ liệu SQL và NoQuery có thể được thu nhỏ một cách hiệu quả. Tuy nhiên, đối với DB DB, tỷ lệ dọc có thể là một hạn chế; một máy chủ DB duy nhất sẽ có giới hạn về lượng năng lượng tính toán mà nó có thể mang theo.

Một điều cũng quan trọng cần lưu ý ở đây là, đối với hầu hết các ứng dụng bạn sẽ xây dựng, bạn có thể không đạt tối đa khả năng tính toán máy chủ của bạn, nhưng điều đó rất hữu ích để ghi nhớ điều này. Tuy nhiên, đối với các ứng dụng kinh doanh lớn triển khai SQL, một tùy chọn phổ biến để vượt qua giới hạn này là Shending.

Shending là gì?

Shending là quá trình phá vỡ các bảng lớn thành nhiều phần nhỏ, được gọi là các mảnh vỡ. Shending có thể được thực hiện bằng cách phân vùng theo chiều ngang một cơ sở dữ liệu. Điều này không được nhầm lẫn với tỷ lệ ngang và dọc. Phân vùng ngang đề cập đến quá trình lưu trữ các hàng của bảng trong nhiều nút cơ sở dữ liệu. Mặt khác, phân vùng dọc yêu cầu lưu các cột của bảng trên các nút khác nhau. Điều này cho phép cơ sở dữ liệu mở rộng hiệu quả và tăng hiệu suất.

Ví dụ cơ sở dữ liệu

SQL

  • MySQL – Một cơ sở dữ liệu nguồn mở rất phổ biến. Tuy nhiên, dễ dàng cơ sở dữ liệu được lựa chọn cho nhiều nhà phát triển PHP, cũng có thể được sử dụng với Node.js, C #, C ++, Java, Perl, Ruby và Python.
  • MSSQL – Microsoft SQL cung cấp rất nhiều sự ổn định vì sự phát triển của nó trực tiếp từ Microsoft, cũng cung cấp một số hỗ trợ về mặt khắc phục thảm họa.
  • MariaDB – Điều này được xây dựng trên MySQL bởi các nhà sản xuất MySQL, dự định giữ MariaDB là phiên bản miễn phí mãi mãi.
  • PostgresSQL – Một cơ sở dữ liệu nguồn mở rất phổ biến. Tự hào là cơ sở dữ liệu nguồn mở tiên tiến nhất thế giới
  • Oracle – Điều này thường được điều chỉnh theo các giải pháp doanh nghiệp của Oracle với một số hạn chế trên phiên bản miễn phí của nó.

NoQuery

  • MongoDB – Có lẽ là NoQuery DB nổi tiếng nhất, phổ biến trong số các nhà phát triển ứng dụng làm việc với ngăn xếp MERN (MongoDB, Express, React, Node) hoặc MEAN stack (MongoDB, Express, Angular, Node).
  • Firebase – Được giới thiệu vào năm 2011 và được Google mua lại vào năm 2014, đang được sử dụng rộng rãi bởi các nhà phát triển ứng dụng web và di động.
  • Apache Couch DB – Một NoQuery DB dựa trên tài liệu lưu trữ dữ liệu dưới dạng JSON.
  • Redis: Đây là NoQuery DB, có lẽ được biết đến nhiều nhất vì được sử dụng trong việc lưu trữ dữ liệu với thời gian tùy chọn để sống. Nó cũng nổi tiếng với tốc độ của nó.

Phần kết luận

Bạn có thể tạo bất kỳ loại ứng dụng nào với cơ sở dữ liệu SQL hoặc NoQuery. Nó phụ thuộc vào yêu cầu của bạn. Nếu bạn đang xem xét một cơ sở dữ liệu nơi bạn có nhiều lần đọc hơn và ít ghi hơn, thì NoQuery có thể là một lựa chọn tốt. Tuy nhiên, nếu bạn đang xem xét việc xây dựng một ứng dụng có nhiều ghi hơn đọc, thì SQL có thể là giải pháp tốt hơn. Về khả năng mở rộng, khi ứng dụng của bạn đạt quy mô rất lớn, bạn có thể sẽ sử dụng cả hai DB.

THẺ

  • Cơ sở dữ liệu

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map