2012-01-02 26 views
6

Vì vậy, tôi có ứng dụng này sẽ có nhiều mô-đun, từ quản lý dự án đến các mô-đun kế toán. Câu hỏi đặt ra là tôi nên có một cơ sở dữ liệu cho mỗi khách hàng (công ty) hoặc một cơ sở dữ liệu chứa mọi thứ?một cơ sở dữ liệu cho mỗi khách hàng hoặc tất cả khách hàng trong một cơ sở dữ liệu. Tôi nên sử dụng cái nào cho một ứng dụng trực tuyến?

1) cái nào hiệu quả hơn?
2) sẽ khó khăn hơn nhiều trong việc quản lý nhiều cơ sở dữ liệu hoặc có thể quản lý được.
3) Chúng ta sẽ có cùng một ứng dụng cho tất cả người dùng, có nghĩa là cùng một lược đồ sẽ được sử dụng bất kể số lượng cơ sở dữ liệu.
4) một số khách hàng sẽ có rất nhiều điều đó (ví dụ kế toán có thể có tới 2 triệu hàng được thêm mỗi năm trong một bảng) trong khi những người khác sẽ sử dụng ít dữ liệu hơn nhiều.

bạn nghĩ tôi nên sử dụng điều gì?

+0

bản sao có thể có của [Nhiều lược đồ so với các bảng khổng lồ] (http://stackoverflow.com/questions/8340721/multiple-schemas-versus-enormous-tables) [Câu trả lời này] (http://stackoverflow.com/a/8343142/562459) cung cấp tổng quan về các vấn đề. –

Trả lời

5

1) Có cơ sở dữ liệu riêng biệt cho phép phân phối tải trọng dễ dàng hơn trên một số máy chủ, nó nâng mái bằng nhiều cách; đĩa, bộ nhớ, khóa, cpu, thời gian sao lưu, v.v. Nếu bạn nghiêm túc về việc đưa hàng triệu hàng vào mysql, thì chắc chắn là một ý tưởng hay với các cơ sở dữ liệu riêng biệt (không chỉ các lược đồ), và thậm chí là các cá thể riêng biệt, để các khách hàng tiêu thụ tài nguyên sẽ không áp đặt thời gian chết. Nó sẽ là chính xác N lần khó khăn hơn để quản lý nơi N là số lượng cơ sở dữ liệu: o) Chi phí thêm này bạn phải so sánh với chi phí sử dụng chỉ một db/lược đồ và thay vào đó quản lý tách khách hàng trong mã. Nó cũng khó quản lý hơn nếu bạn phải gọi hỗ trợ khách hàng tại công ty lưu trữ của bạn, hoặc thậm chí là dba gắt gỏng cục bộ của bạn, thay vì chỉ chạy một kịch bản gọn gàng từ bảng điều khiển của bạn mỗi khi bạn cần cập nhật lược đồ hoặc tạo cơ sở dữ liệu mới.

Một số cơ sở dữ liệu và các khuôn khổ kiên trì có hỗ trợ cho multi-tenancy, Oracle có này và hỗ trợ đang bắt đầu xuất hiện trong Hibernate 4.

Mặc dù nhiều đối số chỉ theo hướng cơ sở dữ liệu riêng biệt, nó thường chỉ có thể sử dụng một cơ sở dữ liệu.

+0

1) có, chúng tôi đã có một số người dùng trên một ứng dụng cũ hơn, những người đang tạo ra khoảng 2m hàng một năm (kế toán đặc biệt). 2) vấn đề với điều này là làm cách nào để đảm bảo rằng tất cả các cơ sở dữ liệu đã được cập nhật khi tôi chạy tập lệnh? – redmoon7777

+0

@ redmoon7777, điều đó hoàn toàn phụ thuộc vào bạn, cũng giống như bạn có thể đảm bảo việc tách dữ liệu trong một databse đa nhiệm. –

+0

bạn nói đúng. Tôi đã nhìn xung quanh trong nhiều ngày tôi vẫn không thể tìm thấy câu trả lời "đúng". Ngay bây giờ tôi đang hướng tới nhiều cơ sở dữ liệu. – redmoon7777

0

bảo mật sẽ là con gấu thực sự nếu bạn không sử dụng cơ sở dữ liệu riêng biệt, bất kể bất kỳ mối quan tâm nào khác. bạn sẽ phải cực kỳ thận trọng với mã hóa để đảm bảo một công ty không thấy (hoặc sửa đổi hoặc xóa) dữ liệu của người khác.

+0

Miễn là cơ sở dữ liệu nằm phía sau một tập hợp các tập lệnh và không được tiếp xúc trực tiếp với khách hàng, nó không phải là tất cả những khó khăn để đảm bảo rằng dữ liệu được an toàn. –

+0

hiệu suất như thế nào? – redmoon7777

+0

Tôi muốn có một số cơ chế khác thực thi quyền truy cập vào dữ liệu bên cạnh việc tin tưởng vào mã, đặc biệt là khi sử dụng các trình lập trình thuê đáng ngờ. –

3

Về lý thuyết, nhiều cơ sở dữ liệu sẽ tốt hơn cho hiệu suất. Đó là, nếu bạn có thể đặt chúng trên bộ điều khiển đĩa riêng biệt. Nhưng trong thực tế họ sẽ hầu như tất cả được trên cùng một đĩa, do đó, có lẽ sẽ không đạt được hiệu suất. Thêm vào đó, các đĩa bổ sung được sử dụng tốt hơn như các thành viên bổ sung của mảng RAID hơn là các đĩa logic riêng biệt bổ sung mà bạn có thể giảm tải dữ liệu.

Từ quan điểm bảo trì, nhiều cơ sở dữ liệu sẽ là một cơn ác mộng. Mỗi ALTERation cho cơ sở dữ liệu sẽ cần phải được thực hiện N lần, trong đó N là số lượng khách hàng. Tất nhiên bạn sẽ không bao giờ làm điều đó bằng tay, vì vậy bạn sẽ luôn phải làm điều đó theo chương trình, và bạn sẽ sớm bắt đầu đánh giá cao những thứ dễ dàng như thế nào nếu bạn chỉ có thể thực hiện cùng một phép ALTERations với một vài cú nhấp chuột trên bảng điều khiển quản lý thay vì phải viết mã để làm chúng cho bạn mỗi lần.

+0

bạn là đúng, nhưng là quản lý cơ sở dữ liệu vấn đề duy nhất với việc sử dụng nhiều cơ sở dữ liệu? – redmoon7777

+0

Vâng, không thuận tiện khi có nhiều cơ sở dữ liệu nếu bạn định thực hiện bất kỳ truy vấn cơ sở dữ liệu chéo nào, nhưng tôi nghĩ rằng nếu nó thực sự phải được thực hiện, nó có thể được thực hiện, vì vậy nó không phải là trình hiển thị . –

+0

đúng, điều đó sẽ ảnh hưởng đến tập lệnh để thu thập dữ liệu trên tất cả khách hàng cùng một lúc. – redmoon7777

Các vấn đề liên quan