Tôi biết Shopify chỉ sử dụng một cơ sở dữ liệu cho tất cả các cửa hàng. Nhưng làm thế nào họ có thể xử lý cơ sở dữ liệu của họ với một dữ liệu lớn như vậy? Đó có phải là một ý tưởng tốt để sử dụng cơ sở dữ liệu duy nhất cho hơn 50.000 cửa hàng?
Tôi biết Shopify chỉ sử dụng một cơ sở dữ liệu cho tất cả các cửa hàng. Nhưng làm thế nào họ có thể xử lý cơ sở dữ liệu của họ với một dữ liệu lớn như vậy? Đó có phải là một ý tưởng tốt để sử dụng cơ sở dữ liệu duy nhất cho hơn 50.000 cửa hàng?
Câu trả lời:
Xin lưu ý: Tôi đang trả lời từ góc độ Máy chủ SQL, vì vậy tôi đề cập đến một số khái niệm dành riêng cho SQL Server, nhưng tôi tin rằng tất cả các khái niệm này đều có tương đương trong các nền tảng RDBMS chính khác, với những lợi ích và hạn chế tương tự.
Tôi cũng có thể sẽ tiếp tục chỉnh sửa câu trả lời này khi tôi nghĩ về những ưu / nhược điểm tiềm năng khác.
Vâng, nó thực sự phụ thuộc vào lược đồ, khối lượng, vv Chính xác thì một cửa hàng lưu trữ là gì? Làm thế nào khác với việc lưu trữ dữ liệu khoảng 50.000 con mèo hoặc 50.000 sản phẩm hoặc 50.000 hạt dẻ?
Có một số lý do (không chỉ riêng về khía cạnh kích thước) tại sao bạn không muốn lưu trữ dữ liệu cho 50.000 khách hàng khác nhau trong một cơ sở dữ liệu, nếu thực sự dữ liệu có thể được tách biệt hoàn toàn bởi khách hàng (không bao gồm các bảng tra cứu như mã zip hoặc các bảng dành riêng cho ứng dụng, có thể đi vào một cơ sở dữ liệu trung tâm duy nhất):
nếu một khách hàng vượt xa ứng dụng, không có cách nào dễ dàng trích xuất dữ liệu của họ và chuyển nó sang một thể hiện khác, máy chủ, v.v., trừ khi bạn lên kế hoạch trước và phân vùng trên một cái gì đó như CustomerID
và có 50.000 filegroup (bạn bị giới hạn dù sao cũng có tới 15.000 phân vùng hoặc 1.000 nếu bạn sử dụng phiên bản SQL Server cũ hơn và việc có quá nhiều nhóm fileg có thể là thảm họa ). Cũng lưu ý rằng phân vùng yêu cầu Phiên bản doanh nghiệp.
nếu nó chỉ ra rằng tất cả các khách hàng của bạn chỉ đơn giản là quá lớn trong trường hợp này, nhân rộng ra có nghĩa là có được phần cứng mới và di chuyển toàn bộ cơ sở dữ liệu ở đó (và có khả năng làm điều đó một lần nữa).
xóa một khách hàng có thể gây đau đớn không kém, vì bạn sẽ phải xóa một số% hàng khỏi các bảng rất lớn và điều đó sẽ không rẻ.
bạn có thể sẽ phân phối rộng rãi dữ liệu khách hàng (một khách hàng với một tỷ hàng, một khách hàng khác với 5.000). Điều này có thể dẫn đến những thứ như đánh hơi thông số và hiệu suất bất lợi liên quan đến tính chính xác và chất lượng kế hoạch (vì bạn có thể sẽ sử dụng lại cùng một gói cho cùng một truy vấn đối với các tập dữ liệu rất khác nhau).
tất cả khách hàng của bạn phải tuân theo các gói SLA và HA / DR chính xác giống nhau. Bạn có toàn bộ cơ sở dữ liệu ở chế độ khôi phục hoàn toàn với các bản sao lưu nhật ký trong một phút hoặc bạn đơn giản và dựa vào các bản sao lưu đầy đủ + diff. Nếu bạn phải hoàn nguyên vì lỗi của khách hàng hoặc cần khôi phục cơ sở dữ liệu đến một thời điểm, điều đó ảnh hưởng đến từng khách hàng.
có khả năng xảy ra lỗi khi truy xuất dữ liệu - ví dụ, các lỗi trong đó các mệnh đề có thể dẫn đến một khách hàng nhìn thấy dữ liệu của khách hàng khác hoặc tất cả dữ liệu của các khách hàng khác.
có thể có ý nghĩa pháp lý (một số công ty sẽ có những yêu cầu khắt khe rằng bạn không đặt dữ liệu của họ vào cùng một cơ sở dữ liệu như bất kỳ công ty nào khác, và đặc biệt là đối thủ cạnh tranh của họ).
nếu bảo mật dữ liệu của một khách hàng là quan trọng, thì việc đạt được việc sử dụng phân tách cơ sở dữ liệu sẽ dễ dàng hơn nhiều so với phân tách trong bảng.
Một số lợi thế để có mỗi khách hàng trong một cơ sở dữ liệu riêng biệt (hoặc ít nhất là có nhiều cơ sở dữ liệu, mỗi cơ sở cho một nhóm khách hàng):
DROP DATABASE
.Một số nhược điểm: