2012-02-19 42 views
9

Tôi muốn phát triển một trò chơi phức tạp với hàng nghìn chức năng và các cuộc gọi cơ sở dữ liệu.Truy cập cơ sở dữ liệu đồng bộ và không đồng bộ

Tôi tự hỏi nếu thực sự cần thiết để thực hiện truy vấn cơ sở dữ liệu của tôi trong async. Đó là một nỗi đau để mã, và tất cả các chức năng của tôi sẽ cần phải sử dụng callbacks thay vì phương pháp sạch return. Đây có phải là cách tiếp cận bình thường không?

Việc mã hóa các cuộc gọi này trong async thực sự nhanh hơn nhiều, khi xem xét cơ sở dữ liệu MySQL xử lý một truy vấn một lần?

+0

"Cơ sở dữ liệu MySQL xử lý một truy vấn một lần" - mỗi kết nối. Mysql sinh ra chủ đề mới cho mỗi kết nối, có ít nhất là kết nối nhiều như số lõi trên mysql hộp nên tăng hiệu suất. –

+1

Tại sao nên xem xét node.js nếu bạn không bán các đặc tính của lập trình không đồng bộ? Hãy đảm bảo bạn không chỉ là một người hâm mộ khác mà không có lý do chính đáng, vui lòng xem video http://www.youtube.ug/watch?v=bzkRVzciAZg –

Trả lời

11

Trừ khi một cái gì đó đã thay đổi đáng kể trong thời gian gần đây Node.JS, bạn đang khá nhiều buộc phải sử dụng truy cập cơ sở dữ liệu async để mở rộng quy mô cũng kể từ tất cả yêu cầu người dùng của bạn sẽ thực hiện trên one single thread và đồng bộ chờ đợi cho các cơ sở dữ liệu thực sự sẽ giảm hiệu suất của bạn . Nếu một người dùng thực hiện một hoạt động chậm, tất cả người dùng khác sẽ phải chờ cho đến khi hoàn thành.

Node.JS thực sự được xây dựng cho luồng điều khiển sự kiện không đồng bộ, bạn sẽ nhận được hiệu suất tốt hơn nhiều khi làm việc với nó hơn là làm việc xung quanh nó.

0

Tốc độ của bộ máy cơ sở dữ liệu + thời gian truyền sẽ khá giống nhau theo một trong hai cách. Vấn đề là các cuộc gọi không đồng bộ không chặn người gọi. Vì vậy, vòm không đồng bộ là cách để đi cho bất kỳ hệ thống "thời gian thực-ish" nào cần đáp ứng cao với các yếu tố đầu vào khác. (Chẳng hạn như các trò chơi luôn phải rất nhạy cảm với con người.)

1

Các truy vấn sẽ được xếp hàng đợi ở cấp cơ sở dữ liệu trong MySQL. Có nhiều tùy chọn hơn nếu bạn có thể nghĩ đến việc sử dụng Mongo DB cho một số dữ liệu của bạn.

3

Yêu cầu không đồng bộ không nhanh hơn các yêu cầu đồng bộ, bất kể bạn thực hiện chúng như thế nào mà chúng vẫn làm chính xác. Điều duy nhất thay đổi đó là bạn chặn theo yêu cầu hay không.

Khi bạn đi với đồng bộ, phương thức thực hiện yêu cầu sẽ dừng việc thực hiện yêu cầu trả lại yêu cầu, chỉ khi nào yêu cầu đó tiếp tục, nó sẽ tiếp tục thực hiện. Mặc dù khi sử dụng yêu cầu không đồng bộ, bạn không cần đợi yêu cầu hoàn tất, bạn có thể tạm dừng và khi hoàn thành yêu cầu gọi lại.

Một điều khác thường là cơ sở dữ liệu là nút cổ chai khi ứng dụng đang thực hiện nhiều cuộc gọi đến dbms, do đó bạn có thể muốn xem xét sử dụng loại bộ nhớ đệm để giảm tải từ dbms.

1

Giống như Nitzan, bạn phải biết rằng "Yêu cầu không đồng bộ không nhanh hơn yêu cầu đồng bộ, bất kể bạn làm như thế nào mà chúng vẫn làm chính xác như vậy".

Không ai nói đến, nhưng nếu có rất nhiều người sử dụng và rất nhiều yêu cầu, bạn có giải pháp khác để hạn chế truy cập cơ sở dữ liệu:

Tạo file cache

Và cập nhật chúng bằng cách sử dụng hành động hoặc bởi nhiệm vụ CRON.

  • Người dùng thông tin
  • Users báo
  • Người dùng hành động
  • Người dùng hàng tồn kho ...

For Your Site quá trình cơ sở dữ liệu

Đối với một số yêu cầu tái phát, bạn có thể tích trữ chúng trong MySQL. Chúng sẽ được thực thi nhanh hơn yêu cầu của người dùng.

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