2009-04-16 22 views
6

Chúng tôi có tập dữ liệu định giá thay đổi giá trị chứa hoặc số lượng bản ghi. Số lượng bản ghi đã thêm hoặc bị xóa nhỏ hơn so với những thay đổi về giá trị. Tập dữ liệu thường có từ 50 đến 500 mục với 8 thuộc tính. Chúng tôi hiện đang sử dụng AJAX để trả về cấu trúc JSON đại diện cho tập dữ liệu và cập nhật trang web bằng cấu trúc này với các giá trị mới và nơi cần xóa hoặc thêm các mục cần thiết.Hàm băm tốt nhất để phát hiện các thay đổi dữ liệu?

Chúng tôi thực hiện yêu cầu với hai giá trị băm, một cho các giá trị và giá trị khác cho các bản ghi. Đây là các băm MD5 được trả về với cấu trúc JSON được gửi đi với một yêu cầu sau đây. Nếu có sự thay đổi về băm, chúng ta biết rằng chúng ta cần cấu trúc JSON mới nếu không các hash chỉ được trả về để tiết kiệm băng thông và loại bỏ việc xử lý phía máy khách không cần thiết.

Vì MD5 thường được sử dụng với mã hóa là lựa chọn tốt nhất của thuật toán băm để chỉ phát hiện các thay đổi dữ liệu?

Cách thay thế nào chúng ta có thể phát hiện thay đổi đối với giá trị và cập nhật cũng như phát hiện các mục được thêm hoặc xóa và thao tác DOM trang tương ứng?

Trả lời

10

MD5 là một thuật toán hợp lý để phát hiện các thay đổi đối với tập dữ liệu. Tuy nhiên, nếu bạn không quan tâm đến các thuộc tính mã hóa và rất quan tâm đến hiệu suất của thuật toán, bạn có thể sử dụng thuật toán kiểu tổng kiểm tra đơn giản không được thiết kế để bảo mật mã hóa. (mặc dù điểm yếu trong MD5 đã được phát hiện trong những năm gần đây, nó vẫn được thiết kế để bảo mật mã hóa, và do đó làm việc nhiều hơn có thể được yêu cầu cho kịch bản của bạn).

Tuy nhiên, nếu bạn hài lòng với hiệu suất tính toán của MD5, tôi chỉ gắn bó với nó.

-3

Tôi nghĩ rằng bất kỳ hàm băm thường được sử dụng nào cũng sẽ làm những gì bạn muốn - cung cấp một biểu diễn duy nhất của một thực thể.

Đối với sự cố bạn đang cố giải quyết, giải pháp của tôi sẽ là có bảng phụ trợ ghi lại tất cả thay đổi. Không phải bản thân các thay đổi, mà là một số nhận dạng của các hàng đã thay đổi. Trên cơ sở gọi lại cơ sở định kỳ đến máy chủ và nhận danh sách tất cả các đối tượng đã thay đổi và sử dụng điều này để quyết định ứng dụng khách cần hàng cập nhật/xóa/thêm.

+1

Đây là sự hiểu lầm phổ biến. Hàm băm không "cung cấp một biểu diễn duy nhất của một thực thể". Trong thực tế, nó được đảm bảo không phải là trường hợp cho bất kỳ hàm băm có tên miền lớn hơn phạm vi của nó. – recursive

0

Điều bạn đang làm với âm thanh khá tốt đối với tôi.

Nếu dung lượng phía máy chủ rẻ và giảm thiểu việc sử dụng mạng là rất quan trọng, bạn có thể nhớ máy chủ, cho mỗi khách hàng, tập dữ liệu cuối cùng là gì và chỉ gửi các khác biệt (như danh sách chèn, xóa và chỉnh sửa) trên mỗi yêu cầu. Nếu bạn sắp xếp các hàng dữ liệu của mình trước, những khác biệt này có thể được tính toán một cách hiệu quả bằng cách sử dụng một thuật toán phân biệt như được sử dụng bởi diff.

Cách tiếp cận này rất nhạy cảm với sự cố ngừng mạng - nếu một ứng dụng không nhận được phản hồi, lỗi sẽ tích lũy. Tuy nhiên điều này có thể được khắc phục bằng cách khách hàng đã gửi MD5 băm với mỗi yêu cầu: nếu nó khác với những gì máy chủ mong đợi, toàn bộ danh sách sẽ được gửi thay vì danh sách thay đổi.

4

MD5 là tốt. Nếu nó có hiệu suất quá thấp, bạn có thể thử thuật toán kiểm tra nhanh, chẳng hạn như ví dụ Adler-32.

0

Tôi đồng ý với câu trả lời của Jonathan về MD5. Đối với các cách thay thế để phát hiện thay đổi, nếu bạn sẵn sàng lưu trữ (hoặc đã lưu trữ) trên máy chủ thời gian/ngày của thay đổi gần đây nhất, bạn có thể chuyển qua lại cho khách hàng.Bạn tránh tính toán hoàn toàn và thậm chí bạn có thể sử dụng hầu hết mã hiện có của mình.

-
bmb

Các vấn đề liên quan