1) Đối với mục đích thực sự va chạm băm thấp, tôi có thể lấy đi chỉ bằng cách sử dụng một nửa trong số 128 bit của một sha1 chứ không phải là đối phó với sha1 chính nó? Tôi hiểu điều này là không thích hợp cho băm mật mã, nhưng tôi chỉ cần băm cho các khóa bảng băm.OK để chỉ sử dụng 64 bit bit băm sha1 làm id?
2) Thời gian tính toán không phải là ưu tiên và bên cạnh đó tôi đang băm nhỏ các mẩu dữ liệu rất nhỏ. Đặc biệt, tôi chủ yếu sẽ lấy 2 hoặc 3 băm 64 bit và băm chúng để có được một băm 64 bit khác. Có một lựa chọn tốt hơn so với sha1 cho mục đích này? Một lần nữa, va chạm sẽ rất khó xảy ra.
3) Tôi là một newb sql. Nó là một ý tưởng tốt để sử dụng băm 64-bit như id trong sql? Liệu các lỗi 64-bit có gây ra các vấn đề về hiệu suất trong sqlite hoặc postgres không? Tôi sẽ cần phối hợp dữ liệu trên nhiều cơ sở dữ liệu (bao gồm cả chỉ mục Lucene), vì vậy tôi thấy rằng tôi nên xử lý trực tiếp các hash trong bảng chứ không phải làm việc với các id tự động tăng (chỉ có ý nghĩa trong một db chứ không phải trên tất cả các cửa hàng dữ liệu). Tôi hình 64-bit là một thỏa hiệp tốt: đủ lớn để không va chạm nhưng tiết kiệm không gian (và thời gian tra cứu?).
4) Còn CRC-64 thì sao? Điều đó có tạo ra phân phối đủ ngẫu nhiên không?
Tôi đoán GUID/UUID là khá nhiều những gì tôi muốn. Không chắc chắn nếu hỗ trợ sqlite là đủ mặc dù, vì vậy tôi sẽ điều tra điều đó. Như tôi đã nói, tôi là một newb sql. – Jegschemesch
Sqlite3 có thể dễ dàng mở rộng để hỗ trợ UUID, và tôi đã thực hiện thành công như vậy trong một ứng dụng iPhone trước đây. –
tôi đồng ý với câu trả lời này. tôi có một bảng đầy hundrets của hàng triệu hàng và sử dụng 64 bit đầu tiên như là phím số nguyên unsgined thay vì một băm sha1 như chuỗi vì lý do hiệu suất. với 350 triệu hàng tôi đã có một số va chạm với 56 bit. tôi luôn kết hợp khóa băm 64 bit với ngày tháng của nó sao cho cả băm và ngày cần phải khớp. Sử dụng phương pháp đó tôi chỉ có 30 triệu hàng mỗi ngày có thể gây ra va chạm, làm giảm đáng kể cơ hội xảy ra trong thời gian dài. một vụ va chạm sẽ dẫn đến một sự bình an duy nhất của thông tin được đặt sai - trong trường hợp của tôi có giá trị tiết kiệm. – bhelm