Xây dựng Ký ức Không gian

Tôi đã dành ba tháng để xây dựng một "Pinterest cho thế giới thực".

Ý tưởng rất đơn giản. Bạn để lại các ghi chú kỹ thuật số, ảnh hoặc câu chuyện tại các tọa độ GPS cụ thể. Mọi người chỉ có thể nhìn thấy chúng khi họ thực sự đứng tại đúng vị trí đó. Nó biến thế giới thực thành một bộ sưu tập các viên nang thời gian kỹ thuật số.

Xây dựng một ứng dụng dựa trên vị trí khó hơn vẻ ngoài của nó. Dưới đây là những gì tôi đã học được về tech stack.

Cơ sở dữ liệu không gian Bạn không thể chỉ lưu vĩ độ và kinh độ dưới dạng các con số đơn giản nếu muốn mở rộng quy mô (scale). Bạn cần các chỉ mục không gian (spatial indexes). Tôi đã sử dụng PostGIS với PostgreSQL.

Nó xử lý:

  • Lập chỉ mục không gian với R-tree
  • Tính toán khoảng cách tích hợp sẵn
  • Truy vấn lân cận nhanh chóng

Nếu bạn cần tìm các ký ức trong vòng 50 mét quanh người dùng, PostGIS sẽ đảm nhận phần việc nặng nhọc nhất.

Chiến lược bộ nhớ đệm (Caching Strategy) Các địa điểm du lịch nổi tiếng nhận được quá nhiều yêu cầu. Việc truy cập cơ sở dữ liệu mỗi hai giây sẽ gây ảnh hưởng xấu đến hiệu suất. Tôi đã sử dụng các lệnh Redis GEO để cache các ID ký ức tại các khu vực đông đúc.

Một mẹo chuyên nghiệp: Đừng cache toàn bộ đối tượng trong Redis. Chỉ cache các ID. Điều này giúp giữ mức sử dụng bộ nhớ thấp và giảm thời gian truy vấn từ 20ms xuống còn 2ms.

Mô hình tải lên (Upload Pattern) Nếu máy chủ của bạn xử lý mọi lượt tải ảnh lên, nó sẽ bị sập dưới tải trọng lớn. Tôi đã sử dụng mô hình tải lên hai giai đoạn:

  • Client yêu cầu máy chủ một pre-signed URL
  • Client tải tệp trực tiếp lên Cloudflare R2
  • Client thông báo cho máy chủ khi việc tải lên hoàn tất

Tôi chọn R2 thay vì S3 vì không có phí egress (phí truyền dữ liệu ra ngoài). Điều này giúp tiết kiệm tiền khi người dùng tải xuống các phương tiện truyền thông.

Những gì đã hiệu quả

  • PostGIS và Redis GEO giúp các truy vấn không gian trở nên nhanh chóng.
  • Tải lên trực tiếp tới R2 cho phép backend mở rộng quy mô.
  • Go và Gin mang lại hiệu suất cao với mức sử dụng bộ nhớ thấp.
  • Quyền riêng tư phân cấp (Riêng tư, Bạn bè, hoặc Công khai) giúp bảo vệ người dùng.

Những gì chưa tốt

  • Độ chính xác của GPS không nhất quán tại các thành phố có nhiều tòa nhà cao tầng.
  • Vấn đề "cold start" là có thật. Ứng dụng cần nhiều người dùng để cảm thấy "sống động".
  • Kiểm duyệt nội dung đòi hỏi sự chú ý liên tục.

Việc xây dựng ứng dụng này đã dạy tôi rằng vị trí vật lý là một chiều kích chưa được đánh giá đúng mức cho các ứng dụng mạng xã hội. Nội dung kỹ thuật số mang lại cảm giác ý nghĩa hơn khi nó gắn liền với một địa điểm thực tế.

Source: https://dev.to/kevinten10/building-spatial-memory-why-i-built-a-pinterest-for-the-physical-world-and-what-i-learned-bpm

Optional learning community: https://t.me/GyaanSetuAi