NebulaGraph'a .NET'ten idempotent toplu yükleme: VID ile çoğaltma sorunu
NebulaGraph'ta benzersiz indeks olmadığı için tekrar eden veri, yükleme hatalarının başlıca kaynağı. Yazar, iş anahtarından deterministik VID üretip kenarlarda rank değerini sabitleyerek yüklemeleri tekrar çalıştırmayı güvenli hale getirmeyi anlatıyor. .NET tarafında toplu nGQL yükleme deseni de içeriyor.
Kilit noktalar
- VID'i iş anahtarından deterministik üretin; FNV-1a ile 16 karakterlik değer, FIXED_STRING(16) uzayıyla eşleşir
- string.GetHashCode() süreçler arası değiştiği için VID üretiminde kullanılmamalı
- Edge rank'ını 0 sabitleyin ya da değişmez bir iş özniteliğinden türetin; zaman damgası kullanmayın
- Toplu yüklemede INSERT kullanın; UPSERT partition bazında seri çalıştığı için büyük hacimde darboğaz olur
- Yükleme sonrası SUBMIT JOB STATS ile sayıları kaynak verideki farklı iş anahtarı sayılarıyla karşılaştırın
- Tekrar eden string özellikleri nGQL'de kaçışlayarak (ters eğik çizgi ve tırnak) yazın
NebulaGraph'ta vertex ve edge anahtarları dışında benzersizlik kısıtı yoktur; düz INSERT VERTEX mevcut VID için kaydın üzerine yazar. Bu nedenle tekrarlı yüklemelerin güvenli olması, VID'lerin her seferinde aynı iş anahtarından aynı değere çözülmesine bağlıdır. Yazar, FNV-1a ile 16 karakterlik sabit uzunlukta bir VID üretmeyi ve edge rank değerini zaman damgası yerine sabit ya da iş anlamına bağlı tutmayı öneriyor.
Yazı ayrıca .NET'ten 256'lık gruplar halinde toplu INSERT göndermeyi, tamamlanan batch'leri checkpoint ile işaretlemeyi ve geçici hatalarda üstel geri çekilmeyle yeniden denemeyi anlatıyor. Büyük veri setleri için Importer ve Exchange gibi alternatifler de karşılaştırılıyor. Okuyucunun dikkat etmesi gerekenler arasında toplu UPSERT'ün darboğaz olabilmesi, süper düğümler ve iş anahtarlarının değişmesi yer alıyor.
Gerçek dünyada kullanımı
- Yasal veya finansal kayıtları NebulaGraph'a her gece yeniden yükleyen bir .NET veri hattı
- ERP'den gelen müşteri ve sipariş ilişkilerini graf olarak tutan, yarıda kalabilen bir içe aktarma işi
- Kullanıcı-ürün ilişkilerini sürüm numarasıyla sıralı tutan öneri motoru verisi
Neden önemli
Yükleme kodunuz tekrar çalıştığında yinelenen vertex ve edge oluşmaması için VID ve rank tasarımı en baştan doğru yapılmalı. Sonradan dedup adımı eklemek yerine şema kararını ilk gün vermek gerekir.
Benzer haberler
- TableSchema ile veritabanı yapısı yükseltmeleri: karşılaştır, planla, uygulaDEV Community: #dotnet3 gün önce
- Marten ile event sourcing'de yazdığın veriyi hemen oku: ProjectLatest ve UpdatedAggregateJeremy D. Miller (The Shade Tree Developer)6 gün önce
- C# interface'lerinde collection dönüş tipleri: interface, view ve snapshot farkıNick Cosentino (Dev Leader)2 gün önce