5

Google Cloud Spanner recommends chống lại việc sử dụng các số nguyên tăng đơn điệu cho khóa chính. Điều này làm cho một cảm giác hoàn hảo cho các bảng cấp cao nhất vì nó sẽ tạo ra các điểm nóng. Nhưng những gì về bàn xen kẽ? Họ sẽ được lưu trữ trên cùng một nút anyway. Chúng cũng được lưu giữ theo thứ tự sắp xếp để sử dụng UUID hoặc một số ID ngẫu nhiên khác có vẻ tối ưu, đặc biệt nếu chúng cũng sẽ được truy lục theo thứ tự sắp xếp.Autoincrement trong Google Cloud Spanner

Đang đọc id tối đa và lưu trữ maxId + 1 cho hàng mới là giải pháp đúng ở đây?

Trả lời

3

Các hàng trong bảng con xen kẽ được đặt trước bằng khóa của bảng cha, vì vậy bạn có thể coi chúng là khóa không tuần tự, miễn là khóa cha không phải là tuần tự. Trong tình huống này, thông thường nó sẽ không sao vì bạn lưu ý, toàn bộ phạm vi chính này sẽ được phục vụ bởi một máy chủ Span. Nếu bạn lo lắng về việc phát hiện một máy chủ Span đơn lẻ trong tình huống này thì tốt nhất là không xen kẽ bảng. Bạn cũng nên lưu ý rằng nó thực sự tăng hoặc giảm phím được khuyến nghị chống lại vì chúng có cùng tác dụng, chỉ ở các cạnh đối diện của dải ô.

+0

Cảm ơn câu trả lời. Cách tốt nhất để sử dụng các con số ngày càng tăng trong các bảng xen kẽ là gì? Có đơn giản không: max = read ("SELECT MAX (SubId) TỪ SubTable WHERE ParentId = ..."); write ("INSERT INTO SubTable (SubId, ...) VALUES (" + (max + 1) + ", ...)") ? –

+1

Nói chung, bạn vẫn nên tránh và sử dụng UUID với một cột cho các id tuần tự nếu cần. Có rất nhiều nguy hiểm ẩn nấp ở đó, chẳng hạn như đảm bảo bạn làm điều đó trong một giao dịch, điều gì xảy ra nếu giá trị gần đây nhất (và tối đa) bị xóa - bạn có thể sử dụng lại nó hay không ?. Có thể tốt hơn khi sử dụng một bảng khác để lưu trữ bộ đếm và đảm bảo bạn có các giao dịch thích hợp. –