2010-04-07 35 views
5

Chúng tôi đang trong quá trình chuyển từ trình tạo hướng dẫn ngẫu nhiên C# Guid.NewGuid() ngẫu nhiên thành thuật toán guid tuần tự được đề xuất trong this post. Trong khi điều này dường như làm việc tốt cho MS SQL Server, tôi không chắc chắn về các hàm ý cho cơ sở dữ liệu Oracle, trong đó chúng ta lưu trữ các guids trong một trường thô (16). Có ai có bất kỳ cái nhìn sâu sắc về việc liệu thuật toán này sẽ là tốt cho việc tạo ra tuần tự guids cho Oracle cũng như cho MS SQL Server, hoặc nếu một biến thể khác nhau nên được sử dụng.Tuần tự (lược) GUID cho Oracle

Cảm ơn!

Trả lời

2

Sử dụng raw (16) có vẻ là một kiểu dữ liệu hợp lý cho GUID. Kích thước tối đa cho kiểu dữ liệu thô là 2000 byte và được hỗ trợ trong Oracle 9i, 10g và 11.

Ngoài ra còn có một hàm sql để tạo GUID, được gọi là SYS_GUID. xem tài liệu ở đây,>http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/functions153.htm

Bạn có thể quan tâm trong bài viết này ->http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html

+0

Cảm ơn câu trả lời của bạn. Tuy nhiên, những gì tôi theo sau không phải là liệu liệu có phải là một kiểu dữ liệu tốt cho các hướng dẫn trong Oracle hay không, nhưng nếu thuật toán được đề cập sẽ gây ra phân mảnh chỉ mục không cần thiết trong Oracle, mặc dù nó có vẻ là một lựa chọn tốt cho MS SQL Server. Hơn nữa, tôi cần phải tạo ra các guids của tôi trên máy khách, vì vậy hàm SYS_GUID sẽ không có nhiều trợ giúp. – Eyvind

+0

Phân chia chỉ mục không cần thiết là gì? Tất nhiên GUIDs sẽ được lây lan (phân mảnh) thông qua toàn bộ phòng của dữ liệu có thể. Đó là những gì GUID là cho. Sự phân mảnh của dữ liệu là một thuộc tính cố hữu của thuật toán GUID, mà cơ sở dữ liệu phải xử lý, cho dù đó là sql-server hay oracle. Việc triển khai chỉ mục có thể xử lý việc này, xem -> http://en.wikipedia.org/wiki/B-tree –

+0

Ý tưởng là sử dụng thuật toán tạo ra các chuỗi * tuần tự * thay vì phiên bản ngẫu nhiên chuẩn. – Eyvind

1

Khi một khối index là 'quá đầy đủ' cho một mục nhập hơn, đó là chia tay.

Oracle có hai đường dẫn, một đường được tối ưu hóa cho các giá trị kiểu 'tuần tự' và một cho giá trị loại 'ngẫu nhiên'. Nếu mục nhập mới đang diễn ra ở phần cuối cùng bên phải của chỉ mục, bạn sẽ nhận được phần tách 90-10. Nếu nó ở đâu đó ở giữa, bạn sẽ nhận được 50-50. Nếu bạn muốn các giá trị "mới" được nhóm lại với nhau trong chỉ mục thì giá trị tuần tự sẽ hữu ích. Nếu bạn muốn chúng phân tán (ví dụ như để tránh tranh chấp về các khối 'nóng'), thì một giá trị ngẫu nhiên sẽ hữu ích.

Cho dù kỹ thuật 'tốt' đối với Oracle có phụ thuộc vào vấn đề bạn đang cố giải quyết hay không.

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