01/10/2018, 08:22

Cập nhật vị trí của các điểm(số lượng rất lớn) sau một khoản thời gian

Chào mọi người Mình đang có 1 project yêu cầu cập nhật tọa độ hàng triệu điểm địa lý(có thể nhiều hơn nữa kia ) trong csdl, việc cập nhật tọa độ của mỗi điểm lại tùy thuộc vào thời gian điểm đó được tạo. Nghĩa là mình tạo điểm A tại vị trí X thì sau đó tầm 1 phút, điểm A sẽ di chuyển tới được vị trí Y nào đó. Yêu cầu thời gian cập nhật tọa độ của điểm đó càng thấp càng tốt, nghĩa là kiểu giả lập việc điểm đó di chuyển ấy . Mỗi điểm thì sẽ như 1 món hàng ấy nên sẽ có khá nhiều thông tin kèm theo, mình nghỉ chỉ cần thay đổi 2 tọa độ x và y của nó là đủ.
Mình gặp vấn đề ở chổ csdl lưu trữ các điểm sẽ là nonsql hay sql, vì ngoài thông tin các điểm còn có thông tin khác nữa như thông tin người dùng blabla… Vấn đề nhức óc thứ 2 là làm cách nào để có thể cập nhật được tọa độ của RẤT RẤT nhiều điểm như thế(việc này sẽ được thực hiện ở server).

  1. Với vấn đề thứ nhất thì mình nghiên về việc sử dụng cả nonsql(lưu thông tin điểm) và sql(lưu thông tin người dùng). Mà cách liên kết giữa 2 thèn này thì hơi mơ hồ , không lẻ khi muốn truy suất thông tin của nonsql ta phải lấy id bên sql để dóng sang và ngược lại
  2. Với vấn đề thứ 2 thì hơi căng, mình chỉ nghỉ được giải pháp cho nó là sử dụng timer rồi sau khoản 30s mình check 1 lần, tương ứng với từng điểm thì sẽ tính systemTime.now - point.lastMovedTime, nếu nó được tầm 1 phút rồi thì mình update lại tọa độ cho điểm đó và đồng thời cập nhật lại point.lastMovedTime. Với hàng triệu điểm thì không biết cách này có ổn không, hay là phải chia nhỏ danh sách các điểm này để xử nhỉ kiểu như chia để trị ấy . Luôn tiện thì ta nên lưu tạm các điểm trong list, sử dụng redis hay cứ mỗi lần update là lại lôi từ db lên nhỉ
Bài liên quan
0