2010-04-07 13 views
5

C# Guid.NewGuid() rasgele-ish guid jeneratörü this post içinde önerilen sıralı guid algoritmasına geçiş sürecindeyiz. Bu, MS SQL Server için iyi çalışıyor gibi gözükürken, Oracle veritabanları için, ham (16) alanda kılavuzları sakladığımızdan emin değilim. Bu algoritmanın, Oracle'ın yanı sıra MS SQL Server için sıralı kılavuzlar oluşturmak için iyi olup olmayacağına veya farklı bir varyasyonun kullanılması gerektiğine dair herhangi bir kavrayış var mı?Ardışık (tarak) Oracle için GUID'ler

Teşekkürler! Ham (16) kullanma

cevap

2

Guıd'lerinin makul veri türü gibi görünüyor. İşlenmemiş veri türü için maksimum boyut 2000 bayttır ve Oracle 9i, 10g ve 11'de desteklenir. Ayrıca, GUID'leri oluşturmak için bir SYS_GUID adı verilen bir sql işlevi de vardır. bkz belgeler burada->http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/functions153.htm

Bu makalede ilginizi çekebilir ->, bu bölünmüş http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html bir endeks blok bir daha giriş için 'çok dolu' olduğunu

+0

Cevabınız için teşekkür ederiz. Ancak, işlediğim şey, işlenmemiş bir işlenenin Oracle'ın kılavuzları için iyi bir veri türü olup olmadığı değil, söz konusu algoritmanın, Oracle'da MS SQL Server için iyi bir seçenek olarak görünse bile, gereksiz dizin parçalanmasına neden olacağıdır. Ayrıca, istemcilerde kılavuzlarımı oluşturmam gerekiyor, bu yüzden SYS_GUID işlevi çok az yardımcı olacaktır. – Eyvind

+0

Tam olarak gereksiz dizin parçalanması nedir? Tabii ki GUID'ler olası verilerin tüm odasına yayılacak (parçalanmış). GUID ne içindir. Verilerin parçalanması, veritabanı, SQL Server veya Oracle olursa olsun, ele alması gereken GUID algoritmasının içsel bir özelliğidir. Endeks uygulaması bunu ele alabilir, bkz. -> http://en.wikipedia.org/wiki/B-tree –

+0

Fikir, standart randomize versiyonun yerine * sıralı * kılavuzları üreten bir algoritma kullanmaktır. – Eyvind

1

olduğunu.

Oracle iki yol vardır 'sıralı' tür değerleri için optimize edilmiş bir ve çok rastgele türü değerleri için. Yeni giriş dizinin en sağ ucunda gidiyorsa, 90-10 bölme elde edersiniz. Ortada bir yerdeyse, 50-50 alırsın. Dizinde birlikte kümelenmiş "yeni" değerler istiyorsanız, sıralı bir değer kullanışlıdır. Eğer bunların dağılmasını istiyorsanız (örneğin 'sıcak' bloklarda çekişmeyi önlemek için), o zaman rastgele değerler yararlıdır.

Oracle çözmeniz için çalışıyoruz ne sorun bağlıdır için teknik 'iyi' olup olmadığı.