Hregionserver có trách nhiệm xử lý các yêu cầu đọc và ghi của phía client. Nó giao tiếp với Hbasemaster để lấy danh sách các vùng để phục vụ và để cho master biết là nó vẫn đang hoạt động.
Các yêu cầu ghi
Khi một yêu cầu ghi tới, đầu tiên nó sẽ được ghi vào bản ghi write-ahead được gọi là Hlog. Tất cả các yêu cầu ghi cho tất cả các vùng mà RegionServer đang phục vụ được ghi vào cùng một bản ghi. Mỗi lần yêu cầu được ghi vào Hlog, nó được lưu trữ trong một bộ đệm gọi là Memcache. Chỉ có một Memcache cho mỗi Hstore.
- 45 -
Các phép đọc được xử lý theo cách kiểm tra Memcache trước tiên và nếu dữ liệu yêu cầu không được tìm thấy, Mapfiles được tìm kiếm cho kết quả.
Cache Flushes
Khi Memcache đạt tới kích thước có thể cấu hình được, nó được đưa vào đĩa, tạo ra một Mapfile mới và một vạch dấu được ghi vào Hlog, do đó khi nó được xem lại, các mục bản ghi trước lần đẩy vào cuối cùng được bỏ qua.
Đẩy bộ đệm xảy ra đồng thời với quá trình xử lý yêu cầu đọc và ghi của regionserver. Trước khi Mapfile mới được di chuyển, các phép đọc và ghi bị treo cho đến khi Mapfile được thêm vào danh sách các Mapfile hoạt động của Hstore.
Nén dữ liệu
Khi số Mapfile vượt quá một ngưỡng có thể cấu hình được, một bộ nén nhỏ được thực thi nhằm củng cố cho Mapfile được ghi gần nhất. Một phép nén lớn được thực thi một cách định kỳ nhằm hợp nhất tất cả các Mapfile vào một Mapfile. Lý do không thực hiện nén lớn thường xuyên là vì mapfile cũ nhất có thể khá lớn và việc đọc và gộp nó với Mapfile cuối cùng, nhỏ hơn rất nhiều, có thể tốn rất nhiều thời gian phụ thuộc vào lượng I/O liên quan đến đọc, gộp và ghi nội dung cùa Mapfile lớn nhất.
Nén xảy ra đồng thời với quá trình xử lý yêu cầu đọc và ghi của regionserver. Trước khi Mapfile mới được di chuyển, các phép đọc và ghi bị treo cho đến khi Mapfile được thêm vào danh sách các Mapfile hoạt động của Hstore và Mapfile được gộp để tạo ra Mapfile mới đã bị xóa bỏ.
Phân cách vùng
Khi tổng kích thước của Mapfile cho một Hstore đạt tới mức có thể cấu hình được ( 256MB), một yêu cầu chia tách được gọi. Chia tách vùng chia dải hàng của vùng cha thành một nửa rất nhanh bởi vì các vùng con đọc từ Mapfile của vùng cha.
Vùng cha trở thành ngoại tuyến, RegionServer ghi các vùng con mới vào vùng Meta và master biết rằng một phép chia đã được thực hiện vì thế nó có thể chỉ định các vùng con vào các RegionServer. Nếu tin nhắn chia tách bị mất, master sẽ nhận ra một phép chia đã xảy ra bởi vì nó scan định kỳ vùng Meta cho các vùng đã được chỉ định.
- 46 -
Một khi vùng cha được đóng lại, các yêu cầu đọc và ghi sẽ bị treo. Client có một cơ chế để phát hiện một phép chia vùng và sẽ đợi và thử lại các yêu cầu khi các vùng con trực tuyến.
Khi một phép nén khởi động tại vùng con, dữ liệu từ vùng cha được copy vào vùng con. Khi các vùng con thực thi một phép nén, vùng cha được coi là thừa.