Điểm:0

Nén SHA256 để trở thành id cơ sở dữ liệu khả thi?

lá cờ de

Không biết nhiều về mật mã, vì vậy cần một số trợ giúp về điều này.

Tôi muốn sử dụng chuỗi SHA256 làm id duy nhất trong cơ sở dữ liệu của mình cho người dùng, nhưng việc mở rộng quy mô đó sẽ khó khăn.

Có thể chuyển đổi chuỗi SHA256 thành phiên bản duy nhất ngắn hơn, không va chạm (hoặc rất hiếm khi va chạm) không?

Việc chuyển chuỗi SHA256 qua CRC32, FNV164 hoặc ADLER32 có thể là một tùy chọn khả thi trong trường hợp này không?

kelalaka avatar
lá cờ in
CRC không phải là tùy chọn. Bạn định chuyển bao nhiêu [mẫu cắt ngắn SHA-256](https://crypto.stackexchange.com/q/64314/18298)? _số liệu_ hiếm khi đối với bạn là gì? Tại sao bạn không thể hỗ trợ đầu ra 256-bit? Bạn có hàng tỷ người dùng? Không có đảm bảo tính duy nhất từ ​​các hàm băm. Bạn có thể kiểm tra [UUID](https://datatracker.ietf.org/doc/html/rfc4122)
Điểm:2
lá cờ kr

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.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.