MinIO, güçlü bir birincil TileDB arka ucu oluşturur çünkü her ikisi de performans ve ölçek için tasarlanmıştır. MinIO, birçok farklı bulut ve şirket içi ortamda başlatılabilen tek bir Go ikili programıdır. Çok hafiftir ancak aynı zamanda aşağıdaki gibi özelliklerle doludur: Ve ve sağlar çeşitli uygulamalarla. MinIO, endüstri lideri performansı ve ölçeklenebilirliği nedeniyle TileDB için mükemmel bir arkadaştır. MinIO muazzam bir performansa sahip; bunu yalnızca 32 düğümlü GET'lerde 325 GiB/s (349 GB/s) ve PUT'larda 165 GiB/s (177 GB/s) olarak kıyasladık. – ve analitik ve AI/ML iş yükleriyle veri gölleri/göl evleri oluşturmak için kullanılır. çoğaltma şifreleme entegrasyonlar kullanıma hazır NVMe SSD'ler TileDB, verileri Genomik, Jeo-uzaysal, Biyomedikal Görüntüleme, Finans, Makine Öğrenimi ve daha fazlası gibi çeşitli uygulamalarda depolamak için kullanılır. TileDB'nin gücü, herhangi bir verinin, çoğu veri bilimi aracı tarafından dahili olarak kullanılan format olan yoğun veya seyrek çok boyutlu bir dizi olarak verimli bir şekilde modellenebilmesinden kaynaklanmaktadır. Verilerinizi ve meta verilerinizi TileDB dizilerinde depolayarak, tüm veri depolama ve yönetim zorluklarını ortadan kaldırırken, çok sayıda API'miz ve entegrasyonlarımız aracılığıyla en sevdiğiniz programlama dili veya veri bilimi aracıyla verilere verimli bir şekilde erişebilirsiniz. TileDB'yi Ayarlayın TileDB'yi kullanarak biraz test verileri oluşturalım. bağımlılığını da kurması gereken TileDB modülünü yükleyin. numpy pip % pip3 install tiledb Collecting tiledb Downloading tiledb-0.25.0-cp311-cp311-macosx_11_0_arm64.whl (10.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.4/10.4 MB 2.7 MB/s eta 0:00:00 Collecting packaging Downloading packaging-23.2-py3-none-any.whl (53 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 53.0/53.0 kB 643.1 kB/s eta 0:00:00 Collecting numpy>=1.23.2 Downloading numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl (14.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.0/14.0 MB 2.5 MB/s eta 0:00:00 Installing collected packages: packaging, numpy, tiledb Successfully installed numpy-1.26.3 packaging-23.2 tiledb-0.25.0 Aşağıdaki Python betiğini çalıştırarak bir test dizisi oluşturun ve adını verin. tiledb-demo.py import tiledb import numpy as np import os, shutil # Local path array_local = os.path.expanduser("./tiledb_demo") # Create a simple 1D array tiledb.from_numpy(array_local, np.array([1.0, 2.0, 3.0])) # Read the array with tiledb.open(array_local) as A: print(A[:]) Komut dosyasını çalıştır % python3 tiledb-demo.py [1. 2. 3.] Bu, gerçek verileri depolamak adında bir dizin oluşturacaktır. tiledb_demo % ls -l tiledb_demo/ total 0 drwxr-xr-x 3 aj staff 96 Jan 31 05:27 __commits drwxr-xr-x 2 aj staff 64 Jan 31 05:27 __fragment_meta drwxr-xr-x 3 aj staff 96 Jan 31 05:27 __fragments drwxr-xr-x 2 aj staff 64 Jan 31 05:27 __labels drwxr-xr-x 2 aj staff 64 Jan 31 05:27 __meta drwxr-xr-x 4 aj staff 128 Jan 31 05:27 __schema Olduğu gibi kullanmaya devam edebilirsiniz ancak her şeyin yerel olması sorun değil çünkü yerel disk veya düğüm arızalanırsa tüm verilerinizi kaybedersiniz. Bunun yerine aynı verileri bir MinIO kümesinden okumak gibi eğlenceli bir şey yapalım. Verileri MinIO Paketine Taşıma Docker ekosistemimizde mc'yi çekerek ve ardından kovayı oluşturmak için play.min.io'yu kullanarak başlayacağız. Mc docker görüntüsünü çekin % docker pull minio/mc Tüm kovaları listeleyerek MinIO Play ile test edin % docker run minio/mc ls play [LONG TRUNCATED LIST OF BUCKETS] Yerel TileDB verilerimizi taşıyacağımız bir paket oluşturun ve buna adını verin. tiledb-demo % docker run minio/mc mb play/tiledb-demo Bucket created successfully `play/tiledb-demo`. veri dizininin içeriğini MinIO klasörüne kopyalayın tiledb_demo tiledb-demo % docker run -v $(pwd)/tiledb_demo:/tiledb_demo minio/mc cp --recursive /tiledb_demo play/tiledb-demo `/tiledb_demo/__commits/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21.wrt` -> `play/tiledb-demo/tiledb_demo/__commits/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21.wrt` `/tiledb_demo/__fragments/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21/a0.tdb` -> `play/tiledb-demo/tiledb_demo/__fragments/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21/a0.tdb` `/tiledb_demo/__fragments/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21/__fragment_metadata.tdb` -> `play/tiledb-demo/tiledb_demo/__fragments/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21/__fragment_metadata.tdb` `/tiledb_demo/__schema/__1706696859758_1706696859758_74e7040e138a4cca93e34aca1c587108` -> `play/tiledb-demo/tiledb_demo/__schema/__1706696859758_1706696859758_74e7040e138a4cca93e34aca1c587108` Total: 3.24 KiB, Transferred: 3.24 KiB, Speed: 1.10 KiB/s Verilerin kopyalandığından emin olmak içeriğini listeleyin. tiledb-demo % docker run minio/mc ls play/tiledb-demo/tiledb_demo [2024-01-15 14:15:57 UTC] 0B __commits/ [2024-01-15 14:15:57 UTC] 0B __fragments/ [2024-01-15 14:15:57 UTC] 0B __schema/ Not: MinIO İstemcisi ( ) veya S3 uyumlu herhangi bir istemci yalnızca boş olmayan klasörleri kopyalar. Bunun nedeni, nesne depolama dünyasında verilerin paket öneklerine göre düzenlenmesi, dolayısıyla boş olmayan klasörlere ihtiyaç duyulmamasıdır. Gelecekteki bir blogda verilerin önekler ve klasörlerle nasıl organize edildiğini daha derinlemesine ele alacağız. Bu nedenle, yerel klasörde gördüğümüz geri kalanları değil, yalnızca bu 3 klasörü görürsünüz. mc Şimdi aşağıdaki Python kodunu kullanarak aynı verileri doğrudan MinIO klasöründen okumaya çalışalım, olarak adlandırın. tiledb-minio-demo.py import tiledb import numpy as np # MinIO keys minio_key = "minioadmin" minio_secret = "minioadmin" # The configuration object with MinIO keys config = tiledb.Config() config["vfs.s3.aws_access_key_id"] = minio_key config["vfs.s3.aws_secret_access_key"] = minio_secret config["vfs.s3.scheme"] = "https" config["vfs.s3.region"] = "" config["vfs.s3.endpoint_override"] = "play.min.io:9000" config["vfs.s3.use_virtual_addressing"] = "false" # Create TileDB config context ctx = tiledb.Ctx(config) # The MinIO bucket URI path of tiledb demo array_minio = "s3://tiledb-demo/tiledb_demo/" with tiledb.open(array_minio, ctx=tiledb.Ctx(config)) as A: print(A[:]) Çıktı tanıdık gelmeli % python3 tiledb-minio-demo.py [1. 2. 3.] MinIO'dan okuduk, şimdi verileri mevcut bir kaynaktan MinIO'ya kopyalamak yerine doğrudan bir MinIO klasörüne nasıl yazabileceğimizi görelim. Doğrudan MinIO Kovasına Yazma Şimdiye kadar size yerel depolamada veya mevcut bir pakette zaten mevcut olan verileri nasıl okuyacağınızı gösterdik. Ancak en başından itibaren doğrudan MinIO'ya yazarak yeni bir başlangıç yapmak isteseydiniz bu nasıl işe yarardı? Hadi bir bakalım. Verileri doğrudan MinIO klasörüne yazma kodu, iki satır değişikliği dışında yukarıdakiyle aynıdır. TileDB verilerinin depolandığı MinIO paketinin yolu, ( yerine) olarak güncellenmelidir. tiledb_minio_demo tiledb_demo MinIO klasöründe depolanacak diziyi oluşturmak için daha önce yerel depolamada yaptığımız işlevini kullanacağız. tiledb.from_numpy [TRUNCATED] # The MinIO bucket URI path of tiledb demo array_minio = "s3://tiledb-demo/tiledb_minio_demo/" tiledb.from_numpy(array_minio, np.array([1.0, 2.0, 3.0]), ctx=tiledb.Ctx(config)) [TRUNCATED] Bu 2 değişikliği yaptıktan sonra betiği çalıştırın ve aşağıdaki çıktıyı görmelisiniz. % python3 tiledb-minio-demo.py [1. 2. 3.] Betiği tekrar çalıştırırsanız, tekrar yazmayı deneyeceğinden aşağıdaki hatayla başarısız olacaktır. tiledb.cc.TileDBError: [TileDB::StorageManager] Error: Cannot create array; Array 's3://tiledb-demo/tiledb_minio_demo/' already exists Sadece aşağıdaki satırı yorumlayın ve onu birden çok kez yeniden çalıştırabilirsiniz. # tiledb.from_numpy(array_minio, np.array([1.0, 2.0, 3.0]), ctx=tiledb.Ctx(config)) % python3 tiledb-minio-demo.py [1. 2. 3.] % python3 tiledb-minio-demo.py [1. 2. 3.] Verilerin beklendiği gibi orada olduğundan emin olmak için MinIO Play grubunu kontrol edin % docker run minio/mc ls play/tiledb-demo/tiledb_minio_demo/ [2024-01-15 16:45:04 UTC] 0B __commits/ [2024-01-15 16:45:04 UTC] 0B __fragments/ [2024-01-15 16:45:04 UTC] 0B __schema/ İşte, MinIO'ya veri aktarmak bu kadar basit. Daha önce aldığınız sonuçların aynısını mı aldınız? Yapmanız gerekirdi, ancak yapmadıysanız göz atabileceğiniz birkaç şey var. Ortak tuzaklar MinIO'ya okumaya/yazmaya çalışırken karşılaşabileceğiniz bazı yaygın hatalara bakacağız. Erişim anahtarınız ve gizli anahtarınız yanlışsa aşağıdaki gibi bir hata mesajı görmeyi beklemelisiniz tiledb.cc.TileDBError: [TileDB::S3] Error: Error while listing with prefix 's3://tiledb-demo/tiledb_minio_demo/__schema/'... The request signature we calculated does not match the signature you provided. Check your key and signing method. Daha sonra, ana bilgisayar adının ve bağlantı noktasının doğru olduğundan emin olmanız gerekir; uygun bir uç nokta olmazsa bunlar karşılaşacağınız hatalardır. Yanlış Ana Bilgisayar Adı: tiledb.cc.TileDBError: [TileDB::S3] Error: … Couldn't resolve host name Yanlış Port: tiledb.cc.TileDBError: [TileDB::S3] Error: … Couldn't connect to server Son fakat bir o kadar da önemlisi, gördüğüm en şifreli hatalardan biri şu: tiledb.cc.TileDBError: [TileDB::S3] Error: … [HTTP Response Code: -1] [Remote IP: 98.44.32.5] : curlCode: 56, Failure when receiving data from the peer Bir sürü hata ayıklamanın ardından, http kullanarak bağlanıyorsanız ancak MinIO sunucusunda TLS etkinleştirilmişse yukarıdaki hatayı göreceğiniz ortaya çıktı. Bağlantı şemasının doğru konfigürasyona ayarlandığından emin olun; bu durumda config["vfs.s3.scheme"] = "https". Raflar Üzerindeki Raflar Raflar Üzerindeki Raflar Bir rap şarkısı var (arayabilirsiniz), burada yığınlar halinde * nakit yığınları olduğu hakkında rap yapıyorlar. Ama bir rap şarkısı daha var ki, ellerinde o kadar çok para yığını var ki, artık onlara "yığın" denilemeyeceğini, artık "raf" olduklarını iddia ediyorlar. Esasen, yığınlarınız çok büyük ve çok yüksek olduğunda, nakit yığınlarınızı depolamak için raflar üzerinde raflara ihtiyaç duyarsınız. öksürük* Bu uygun bir karşılaştırma çünkü veri yığınlarınız sizin için, hakkında konuştukları para yığınları kadar (veya daha fazla) anlam taşıyor. Keşke tüm nesnelerinizi (fiziksel veya sanal) güvende ve kolayca erişilebilir tutacak MinIO gibi bir şey olsaydı. MinIO'yu da ekleyerek TileDB'yi kolayca ölçeklendirebilirsiniz. nispeten kolaylıkla. Ayrıca MinIO'yu mükemmel kılan tüm özelliklere de sahip olursunuz. , , , , diğerlerinin yanı sıra kutudan çıkar çıkmaz. Tüm verilerinizi MinIO'da bulundurarak, gerekli depolama karmaşıklığını azaltırsınız ve dolayısıyla veri depolama maliyetlerinde önemli tasarruflar elde edersiniz; aynı zamanda MinIO'yu ticari donanımda çalıştırmak mümkün olan en iyi performans-maliyet oranını sağlar. MinIO, TileDB motorunuzu sorgulamayı keyifli hale getiren sektör lideri performansla güçlendirir. birden fazla veri merkezinde birden fazla raf Güvenlik ve Erişim Kontrolü Katmanlama Nesne Kilitleme ve Saklama Anahtar Şifreleme Hizmeti (KES) Bu blogda kullanılan kod parçacıklarını bir . MinIO'yu TileDB'ye nasıl bağlayacağınız veya verileri MinIO'ya nasıl geçireceğiniz konusunda herhangi bir sorunuz varsa bizimle şu adresten iletişime geçtiğinizden emin olun: ! git deposu Gevşek Ayrıca görünür. burada