Hôm nay, @heliuslabs đã ra mắt một phương thức RPC mới, getTransactionsForAddress (gTFA) Hãy cùng nói về cách nó hoạt động bên trong Các giao dịch trên Solana thường tham chiếu từ 6-10 tài khoản (tối đa ~256) Khi bạn truy vấn "cho tôi lịch sử của tài khoản X", bạn đang yêu cầu RPC quét các giao dịch và tìm những giao dịch có X trong danh sách tài khoản của chúng Điều này thực chất là cố gắng tìm một cây kim trong đống rơm Bạn không thể đơn giản thêm một chỉ mục tiêu chuẩn vào mảng "tài khoản" ở quy mô lớn – các cơ sở dữ liệu gặp khó khăn trong việc lập chỉ mục các mảng có độ dài biến đổi Giải pháp: chúng tôi đã xây dựng chỉ mục riêng của mình, với một mục cho mỗi cặp (giao dịch, tài khoản) duy nhất Đây không phải là một nhiệm vụ nhỏ – có khoảng ~493 tỷ giao dịch (và vẫn đang tăng) Chỉ mục của chúng tôi hiện đang giữ hơn 2.3 triệu tỷ (!) hàng Mặc dù kích thước lớn, thời gian tìm kiếm P50 là ~8ms dưới tải sản xuất Và chúng tôi có nhiều chỉ mục khác để hỗ trợ tìm kiếm theo slot, thời gian, trạng thái, v.v. Tất cả đều chạy trên các máy chủ bare metal được xây dựng theo mục đích với petabyte NVMEs hàng đầu, được sao chép qua nhiều khu vực tldr – chúng tôi đã chịu đựng để bạn không phải chịu đựng Thưởng thức