MySQL có thế làm database cho game online mobile được không?
Mong mọi người giải đáp giúp em ạ! Và nói cho em những gì mọi người biết về MySQL trong việc làm game online mobile.
MySQL có thế làm database cho game online mobile được không?
Tuỳ theo thiết kế data của bạn. Thường thì một game sẽ sử dụng nhiều database khác nhau, và SQL thường không phù hợp với game online.
Nếu game online mobile của bạn cần thay đổi dữ liệu thường xuyên, mỗi người chơi thao tác thay đổi dữ liệu nhiều lần một giây và dữ liệu bi thay đổi ở nhiều chỗ thì bạn không nên sử dụng cơ sở dữ liệu quan hệ mà sử dụng các hệ quản trị cơ sở dữ liệu dạng NoSQL. Dạng đơn giản nhất là key-value, bạn truyền tên UserId (key) vào thì bạn lấy được tất cả user data của user đó lên, rồi server tính toán và thay đổi đống data đó, nếu cần dùng tiếp thì cache lại ở server luôn, không cần phải lấy lên từ database nữa. Cách này nhanh và cũng đơn giản hơn SQL, vì database NoSQL chỉ cần get và set dữ liệu, không phải hao tốn tài nguyên để tính toán nên chịu được nhiều truy vấn hơn SQL.
Tuy nhiên phải biết được key để get data lên, và với một key bạn phải truyền toàn bộ value lên (giống như select * from table where userId = 001
thay vì select name from table where userId = 001
, và chỉ có thể tìm theo userId chứ không theo trường khác), khi cần sắp xếp, tìm kiếm, không lẽ bạn lại truyền toàn bộ data sang server, như thế thì database còn có ý nghĩa gì. Nên trong các trường hợp đơn giản, ta sẽ sử dụng SQL để tìm kiếm diện rộng.
Lợi thế của MySQL cũng như hầu hết các hệ quản trị cơ sở dữ liệu quan hệ khác là tính toán, tìm kiếm, sắp xếp nhanh trên tập hợp dữ liệu không xác định kích thước, tuy nhiên vì dữ liệu lớn nên phải để database tự tính toán, hao tốn tài nguyên database nên lưu lượng truy vấn không cao. Thường sử dụng để xếp hạng, tìm kiếm theo nhiều tiêu chí…
Nếu bạn cho rằng game của bạn không có quá nhiều truy vấn, data cũng không quá to (cứ cho là 5000 user, khoảng 200 user online cùng lúc vào giờ cao điểm, mỗi người chơi update dữ liệu khoảng 1 giây 2 lần) thì bạn có thể dùng MySQL trên các cấu hình máy tính hiện nay. Nhưng với lượng dữ liệu thay đổi thường xuyên quá lớn thì bạn nên đưa việc tính toán dữ liệu này lên server, việc sử dụng NoSQL nên được xem xét. Nếu bạn vừa có dữ liệu lớn, vừa phải có các thao tác sắp xếp, tìm kiếm trên toàn bộ dữ liệu (như gợi ý bang hội, gợi ý bạn bè, xếp hạng người chơi) thì nên kết hợp cả 2.
Với throughput lớn như game online thì dữ liệu sẽ được cập nhật liên tục trên in-memory db. Tức là ram đó. Sau đó sẽ đc flush về database sau.
Vâng cảm ơn anh, em sẽ tìm hiểu vả lại em cũng chưa biết gì về SQL lắm, cho nên còn hơi mông lung. Dù gì cũng cảm ơn anh vì phần nào giúp em hiểu về CSDL trong game ạ!
Thật ra trên thực tế đã có khá nhiều server game online sử dụng MySQL để làm database cho game rồi và nó vẫn ổn định. Vấn đề nó ko hoàn toàn nằm ở hạn chế về database hay đặc biệt là RDBMS mà là cách bạn xây dựng lên 1 server game.
Bạn có thể xử lý tính toán mọi thứ tạm trời trên ram, rồi queue nó lại push xuống database sau cũng là giải pháp mà khá nhiều sv game đã làm. Hoặc có rất nhiều giải pháp sử dụng nhiều cluster để tách biệt write read khi xử lý nhằm tối ưu từng loại product khác nhau mà.
Tóm lại MySQL hoàn toàn có thể đáp ứng được game online 1 cách mượt mà nếu bạn xây dựng đúng cách. Good luck
Lưu dữ liệu in-memory nhé, nhưng phải đảm bảo server viết ra không có lỗi gây crash, nhất là process quản lí database inmemory-sql. Không thì rollback sẽ là bạn đồng hành và có khi sẽ thành try kỉ :))
Mình dùng smartfoxsever 2x. bạn thấy sao?
roll back là gì ạ? EM không hiểu?
back up = sao lưu
roll back = khôi phục từ bản back up
Lúc có nhiều người chơi game của b thì dư động lực để convert data từ SQL sang NOSQL hay key-value như redis. Chứ Server code bằng C++, data memory ngon nghẻ mà ko có ai chơi thì buồn lắm , chắc lúc đó mang project đi xin việc thôi ~. Theo m cứ làm cứ làm xong game rồi cải tiến hiệu năng cũng chưa muộn. Giống như facebook lúc bắt đầu cũng chỉ sài PHP thôi.
Bạn có giải pháp và sử lý dc việc này không