Tôi nghĩ rằng đây là một vấn đề XY và thực sự nên được đăng tại Kỹ thuật phần mềm SE. Mục tiêu được mô tả trong OP, việc tạo ID người dùng, có thể được giải quyết mà không cần bất kỳ mật mã nào.
1. Chia tỷ lệ
Mở rộng quy mô có liên quan khi tải về cơ bản có thể tăng trong một thời gian ngắn. Nhưng ID người dùng mới chỉ cần thiết cho người dùng mới. Một người dùng thông thường sẽ cần từ 1 đến 5 phút để đăng ký. Do đó, bạn sẽ không có nhiều hơn 1 ID mới cho mỗi người dùng mỗi phút.
Nhiều cơ sở dữ liệu cung cấp trình tạo ID. PostreSQL, MariaDB, Oracle cung cấp các trình tạo được gọi là "trình tự". MySQL cung cấp ID tự động gia tăng. Nó không chỉ nhanh khi được sử dụng đơn giản mà các cơ sở dữ liệu này còn cung cấp khả năng tối ưu hóa hiệu suất bổ sung như nhóm ID. Các nền tảng như Java và C# tích hợp tốt với các trình tạo ID này. Về cơ bản, việc tạo một ID mới có nghĩa là chỉ tăng một số nguyên và rất hiếm khi cần các yêu cầu cơ sở dữ liệu.
Ví dụ: Giả sử bạn sử dụng PostgreSQL và sắp xếp theo nhóm 10 000 ID.Giả sử yêu cầu từ ứng dụng đến cơ sở dữ liệu để làm mới phạm vi nhóm mất 10ms. Do đó, bạn có thể tạo 1 000 000 ID mới mỗi giây cho mỗi phiên bản ứng dụng (tức là mỗi nút cụm, mỗi nhóm Kubernetes hoặc tương tự). Trình tạo này sẽ tạo ra số ID bằng số người trên toàn thế giới trong 2 giờ.
Rõ ràng, nếu trình tạo ID người dùng tiêu chuẩn như vậy được sử dụng, nó sẽ không phải là nút cổ chai.
2. Rút ngắn
Bạn sẽ lưu trữ bao nhiêu dữ liệu cho mỗi người dùng? 1K, 10K, 100K? Giả sử bạn có 1K dữ liệu cho mỗi người dùng. Giả sử bạn có nhiều người dùng như Facebook hoặc Twitter. Do đó, 4 byte cho ID sẽ là đủ. Cắt bớt SHA-256 từ 32 xuống 4 byte giúp bạn tiết kiệm 28 byte cho mỗi người dùng, tiết kiệm ít hơn 3% dung lượng lưu trữ. Do đó, sự phức tạp để tìm ra thuật toán chuyển đổi SHA-256 thành 4 byte mà không có nhiều xung đột, nỗ lực triển khai nó một cách chính xác, nỗ lực triển khai xử lý các trường hợp xung đột xảy ra, nỗ lực sửa lỗi và do đó, tổng chi phí của giải pháp như vậy có thể cao hơn nhiều so với chi phí của 3% dung lượng lưu trữ đã lưu. Tính toán nó và sau đó bạn sẽ biết nếu nó có ý nghĩa trong trường hợp của bạn.