Saya baru mengenal gudang data, Jadi saya mencoba mengikuti praktik terbaik, meniru beberapa detail implementasi dari Microsoft Demo DB WideWorldImportersDW, Salah satu hal yang saya perhatikan adalah menggunakan Sequence sebagai nilai default untuk PK lebih dari Identity.


Bisakah saya bertanya, Jika lebih baik menggunakan Sequence daripada Identity di gudang data secara umum dan Mana yang lebih nyaman terutama selama proses ETL?.

1
Anyname Donotcare 10 Januari 2021, 12:34

3 jawaban

Jawaban Terbaik

Urutan memiliki lebih banyak jaminan daripada kolom identitas. Secara khusus, setiap panggilan ke suatu urutan dijamin menghasilkan nilai berikutnya untuk urutan tersebut.

Namun, kolom identity dapat memiliki celah dan inkonsistensi lainnya. Ini semua didokumentasikan di sini.

Karena jaminan tambahan pada urutan, saya menduga mereka lebih lambat. Secara khusus, saya menduga bahwa database tidak dapat mengalokasikan nilai dalam batch. Itu berarti bahwa dalam lingkungan multi-utas, urutan akan memaksakan serialisasi pada transaksi, memperlambat segalanya.

Secara umum, saya melihat identity digunakan untuk mengidentifikasi kolom dalam tabel. Dan meskipun mungkin ada perbandingan kinerja, saya belum melihatnya. Tetapi saya menduga bahwa urutannya sedikit lebih lambat dalam beberapa keadaan.

4
Gordon Linoff 10 Januari 2021, 13:13

Baik Urutan dan Identitas dirancang untuk tabel OLTP untuk memungkinkan penetapan kunci unik yang efektif dalam lingkungan multi-sesi.

Hal penting yang perlu disadari adalah bahwa dalam lingkungan data warehouse Anda sering memiliki pengaturan yang berbeda dan hanya ada satu pekerjaan yang mengisi tabel tertentu.

Dalam lingkungan pengguna tunggal Anda tidak memerlukan fitur di atas sama sekali dan Anda dapat dengan mudah menetapkan kunci secara manual dimulai dengan max(id) +1 dan bertambah satu untuk setiap baris.

Aturan umum gudang data adalah bahwa Anda tidak boleh mencari rekomendasi peluru perak tetapi memeriksa fungsionalitas dan kinerjanya dalam pengujian baru Anda.

Jika Anda melakukan riset tentang SQL Server Identity vs Sequence mis. di sini atau di sini Anda mendapatkan berbagai hasil sebagian lebih memilih yang pertama sebagian fitur yang terakhir.

Oleh karena itu, rekomendasi saya adalah melakukan pengujian dengan secara manual yang ditetapkan ID (yaitu tanpa overhead) sederhana untuk mendapatkan dasar untuk harapan.

Kemudian ulangi dengan identitas dan urutan - bandingkan dan pilih.

sequence di SQL Server ditambahkan kemudian dan didasarkan pada Urutan Oracle, jadi saya tidak berharap itu memiliki beberapa masalah dasar.

Pengalaman dari Oracle memberi tahu kami, Anda harus memiliki cache yang cukup besar dalam urutan untuk mendukung penyisipan massal yang efektif.

Sementara itu identity juga dapat didefinisikan sebagai cache, (IDENTITY_CACHE = { ON | OFF }) jadi sekali lagi, coba ketiga kemungkinan (urutan, identitas, tidak ada) dan pilih yang terbaik.

3
Marmite Bomber 10 Januari 2021, 21:16

Identitas dicakup ke satu tabel, merupakan bagian dari definisi tabel (DDL) dan diatur ulang pada truncate. Identitas adalah unik di dalam tabel. Setiap tabel memiliki nilai identitasnya sendiri saat dikonfigurasi dan tidak dapat dibagikan di seluruh tabel. Dalam penggunaan umum, nilai "berikutnya" digunakan oleh SQL Server saat Sisipan muncul di atas meja.+

Urutan adalah objek kelas satu, dicakup ke database. Nilai "berikutnya" digunakan saat Urutan digunakan (NILAI BERIKUTNYA UNTUK).

Urutan paling efektif digunakan saat Anda membutuhkan pengidentifikasi unik yang dapat dibaca seseorang yang disimpan di beberapa tabel. Misalnya sistem tiket yang menyimpan jenis tiket di tabel yang berbeda dapat menggunakan urutan untuk memastikan tidak ada tiket yang menerima nomor yang sama, terlepas dari tabel tempat disimpannya, dan bahwa seseorang dapat secara wajar merujuk ke nomor tersebut (bukan GUID).

Dalam pergudangan data, tabel dimensi membutuhkan pengidentifikasi baris yang unik di dalam tabel. Secara umum, kunci utama OLTP tidak cukup karena dapat diduplikasi dalam tabel dimensi bergantung pada tipe dimensi, dan Anda tidak ingin mengambil risiko menetapkan konteks tambahan ke OLTP PK karena hal itu dapat menyebabkan tantangan saat data sumber perubahan. Pengidentifikasi baris dimensi seharusnya hanya memiliki arti pada kolom fakta non-ukuran yang terkait dengannya. Kolom fakta tidak digabungkan di dimensi yang berbeda.++

Karena cakupan pengidentifikasi tabel dimensi terbatas pada tabel dimensi, kunci identitas adalah pengidentifikasi baris yang ideal. Mudah dibuat, ringkas untuk disimpan, dan tidak berarti di luar dimensi. Anda tidak akan menggunakan identitas dimensi pada laporan. (Sungguh, tolong jangan jadi pengembang itu.)

+ Jarang Anda perlu mengetahui nilai berikutnya tanpa perlu menetapkan ke baris. Mungkin menjadi tanda bahaya jika Anda mencoba memanipulasi nilai identitas sebelum penugasan

++ tampilan dimensi dapat menggabungkan tabel yang berbeda untuk memberi makan kubus OLAP, dalam hal ini kunci berulang yang persisten harus dihasilkan dari data yang mendasarinya, biasanya dengan menggabungkan string literal dengan setiap kunci tabel dalam format yang dinormalisasi.

1
Wes H 11 Januari 2021, 14:44