12/08/2018, 18:08

Multi-Database với postgresql

1. Giới thiệu Đối với các dự án lớn, với databases quá nhiều thì việc sử dụng multi-databases có lẽ cũng là một giải pháp hay và nên thực hiện. Chúng ta sẽ chia databases lớn đó thành các databases nhỏ hơn và bên trong là table phục vụ cho một chức năng cụ thể. Điều này giúp cho người lập ...

1. Giới thiệu

  • Đối với các dự án lớn, với databases quá nhiều thì việc sử dụng multi-databases có lẽ cũng là một giải pháp hay và nên thực hiện. Chúng ta sẽ chia databases lớn đó thành các databases nhỏ hơn và bên trong là table phục vụ cho một chức năng cụ thể. Điều này giúp cho người lập trình xử lý, quản lý table của các chức năng này tốt hơn.

  • Ví dụ đơn giản như: Tôi làm một app liên quan đến quản lý thư viện, tôi chia databases của tôi thành các databases nhỏ làm các nhiệm vụ:

    • Quản lý sách
    • Chức năng cho mượn, trả sách
    • Xuất nhập kho, quản lý người dùng ...
  • Trên đây là một ví dụ nhỏ, và với các chức năng như trên, tôi sẽ có 1 databases tương ứng với các model cụ thể ....

  • Ví dụ khác là tôi có 2 ứng dụng A và B riêng biệt nhưng sử dụng chung một bảng User, tức là User đã signup ó thể login đc ở B. Vậy multi-databases cũng là một lựa chọn thích hợp cho trường hợp này.

  • Thực tế là có rất nhiều giải pháp cho việc setting multi-database trong rails, nhưng ở bài viết này tôi muốn giới thiệu cách là chúng ta sẽ tạo ra các file migrate và schema riêng biệt, generator các db riêng biệt, và với mỗi databases này đều sử dụng được các rake như create, drop, migration ...

2. Setting multi-databases

Tôi lấy ví dụ, tôi sẽ tạo ra 2 databases với tên gọi là db1 và db2. db1 sẽ được ưu tiên là databases default. Còn db2 là một databases mới tôi cần thêm vào trong app của mình

# config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  username: username
  pool: 5
  host: localhost
  port: 5432
  password: *****

development:
  <<: *default
  database: db1_development
test:
  <<: *default
  database: db1_test
staging:
  <<: *default
  database: db1_staging

Đối với db1 việc rake db:create, db:drop, db:migrate là cách mà chúng ta vẫn thường làm việc, không có gì phải bàn cãi ở đây. Cái chúng ta quan tâm là với db2- một databases được viết chung cùng với db1 thì sẽ làm thế nào để create, drop, migrate

Bước 1 Tạo 1 file database_db2.yml cùng thư mục với database.yml để config cho db2

efault: &default
  adapter: postgresql
  encoding: unicode
  username: username
  pool: 5
  host: localhost
  port: 5432
  password: alphapassword

development:
  <<: *default
  database: db2_development
test:
  <<: *default
  database: db2_test
staging:
  <<: *default
  database: db2_staging

Bước 2: Chúng ta sẽ tạo 1 thư mục db_db2 giống như thư mục db

Đến đây có lẽ chúng ta cũng hiểu cách làm mà tôi muốn giới thiệu là chúng ta đang xây dựng những file, thư mục liên quan đến databases theo như những gì mà câu lệnh

rails app new

sinh ra cho chúng ta             </div>
            
            <div class=

0