#33 - Cuckoo Hashing
Những bài viết hay
How the Go runtime implements maps efficiently (without generics) | Dave Cheney — dave.cheney.net
Cấu trúc dữ liệu Hash là một trong những cấu trúc dữ liệu phổ biến nhất mà bất kỳ developer nào cũng cần phải biết. Mỗi ngôn ngữ lập trình hiện đại như C++, Java, Golang, .etc đều hỗ trợ cấu trúc dữ liệu này. Tuy nhiên mỗi ngôn đều có cách thức cài đặt Hash khác nhau. Vậy giữa C++, Java và Golang, đâu là ngôn ngữ có cấu trúc Hash được cài đặt hiệu quả nhất.
Cuckoo Hashing — codecapsule.com
Cấu trúc dữ liệu hash với <key, value> có nhược điểm là hàm hash có thể hash nhiều khóa (key) thành cùng một giá trị (value), gọi là đụng độ (Collision). Chính vì vậy, để giải quyết vấn đề trên, các nhà khoa học máy tính đã xây dựng một cấu trúc dữ liệu mới dựa trên hash gọi là Cuckoo Hashing.
Consistent Hashing — www.tom-e-white.com
Một bài toán backend được đặt ra như thế này:
Một hệ thống những server sẽ cache dữ liệu từ những request của người dùng lại để tăng tốc độ truy xuất, giảm thiểu tải trên database. Mỗi dữ liệu truy xuất được cache trên các server khác nhau tùy theo request được forward đến server nào.
Trong quá trình vận hành của hệ thống, một cache server X có thể bị loại bỏ khỏi hệ thống, những thông tin trên server đó phải chuyển sang những server khác. Nhưng những service khác lại vẫn được chỉ thị truy cập đến cache server X (đã bị loại bỏ) trả về kết quả cho người dùng. Vì vậy, cần có một cơ chế cache phù hợp để giải quyết vấn đề này, và Consistent Hashing được nghiên cứu và áp dụng.
Sự kiện nổi bật
Launching the 2018 State of Rust Survey - The Rust Programming Language Blog — blog.rust-lang.org
Đội ngũ phát triển ngôn ngữ Rust đang tổ chức một cuộc khảo sát từ cộng đồng Rust để có thể cải thiện Rust tốt hơn. Các bạn Dev nào quan tâm đến Rust có thể tham gia cuộc khảo sát để đóng góp vào cộng đồng Rust nhé.
Advanced (Elastic) Search for your legacy application — www.facebook.com
Ngày 30/8 tại văn phòng VNG sẽ diễn ra tech talk của về cách tích hợp Search Engine Elasticsearch vào một hệ thống hiện tại mà không làm thay đổi môi trường vận hành, cũng như thay đổi những câu lệnh truy vấn SQL. Đăng kí hội thảo miễn phí.
Có thể bạn chưa biết
Technical Debt là định nghĩa về những sự đánh đổi giữ sự nhanh chóng và thiết kế hiệu quả một hệ thống hay feature nào đó trong lĩnh vực Software Engineering. Khi bạn chọn sự nhanh chóng để có thể release một feature càng nhanh càng tốt, thiết kế về feature đó sẽ càng sơ sài, khó phát triển về sau, tạo ra Technical Debt lớn. Ngược lại, nếu chọn một thiết kế hoàn thiện thì Technical Debt sẽ nhỏ hơn.