Zbiorcze pozyskiwanie danych w usłudze Azure Cosmos DB for Gremlin przy użyciu biblioteki funkcji wykonawczej zbiorczej
DOTYCZY: Gremlin
Bazy danych programu Graph często wymagają zbiorczego pozyskiwania danych, aby odświeżyć cały graf lub zaktualizować jego część. Usługa Azure Cosmos DB, rozproszona baza danych i szkielet usługi Azure Cosmos DB dla języka Gremlin, ma działać najlepiej, gdy obciążenia są dobrze rozproszone. Biblioteki funkcji wykonawczej zbiorczej w usłudze Azure Cosmos DB zostały zaprojektowane w celu wykorzystania tej unikatowej możliwości usługi Azure Cosmos DB i zapewnienia optymalnej wydajności. Aby uzyskać więcej informacji, zobacz Wprowadzenie do obsługi zbiorczej w zestawie SDK platformy .NET.
Z tego samouczka dowiesz się, jak używać biblioteki funkcji wykonawczej usługi Azure Cosmos DB do importowania i aktualizowania obiektów grafu do kontenera usługi Azure Cosmos DB for Gremlin. W trakcie tego procesu biblioteka służy do programowego tworzenia obiektów wierzchołków i krawędzi , a następnie wstawiania wielu obiektów na żądanie sieciowe.
Zamiast wysyłać zapytania języka Gremlin do bazy danych, gdzie polecenia są oceniane, a następnie wykonywane pojedynczo, należy użyć biblioteki funkcji wykonawczej zbiorczej, aby utworzyć i zweryfikować obiekty lokalnie. Po zainicjowaniu obiektów grafu biblioteka umożliwia sekwencyjną wysyłanie ich do usługi bazy danych.
Korzystając z tej metody, można zwiększyć szybkość pozyskiwania danych aż do setek razy, co sprawia, że jest to idealny sposób wykonywania początkowych migracji danych lub okresowych operacji przenoszenia danych.
Biblioteka funkcji wykonawczej zbiorczej jest teraz dostępna w następujących odmianach.
.NET
Wymagania wstępne
Przed rozpoczęciem upewnij się, że masz następujące elementy:
Program Visual Studio 2019 z obciążeniem programowania na platformie Azure. Możesz bezpłatnie rozpocząć pracę z programem Visual Studio 2019 Community Edition .
Subskrypcja platformy Azure. Jeśli nie masz jeszcze subskrypcji, możesz utworzyć bezpłatne konto platformy Azure.
Alternatywnie możesz utworzyć bezpłatne konto usługi Azure Cosmos DB bez subskrypcji platformy Azure.
Baza danych usługi Azure Cosmos DB dla języka Gremlin z nieograniczoną kolekcją. Aby rozpocząć pracę, przejdź do usługi Azure Cosmos DB for Gremlin na platformie .NET.
Usługa Git. Aby rozpocząć, przejdź do strony pobierania git .
Clone
Aby użyć tego przykładu, uruchom następujące polecenie:
git clone https://github.com/Azure-Samples/azure-cosmos-graph-bulk-executor.git
Aby uzyskać przykład, przejdź do strony .\azure-cosmos-graph-bulk-executor\dotnet\src\
.
Przykład
IGraphBulkExecutor graphBulkExecutor = new GraphBulkExecutor("MyConnectionString", "myDatabase", "myContainer");
List<IGremlinElement> gremlinElements = new List<IGremlinElement>();
gremlinElements.AddRange(Program.GenerateVertices(Program.documentsToInsert));
gremlinElements.AddRange(Program.GenerateEdges(Program.documentsToInsert));
BulkOperationResponse bulkOperationResponse = await graphBulkExecutor.BulkImportAsync(
gremlinElements: gremlinElements,
enableUpsert: true);
Wykonaj polecenie
Zmodyfikuj parametry zgodnie z opisem w poniższej tabeli:
Parametr | Opis |
---|---|
ConnectionString |
Parametry połączenia usługi, które znajdziesz w sekcji Klucze konta usługi Azure Cosmos DB dla języka Gremlin. Jest on sformatowany jako AccountEndpoint=https://<account-name>.documents.azure.com:443/;AccountKey=<account-key>; . |
DatabaseName , ContainerName |
Nazwy docelowej bazy danych i kontenera. |
DocumentsToInsert |
Liczba dokumentów do wygenerowania (dotyczy tylko danych syntetycznych). |
PartitionKey |
Gwarantuje, że klucz partycji jest określony z każdym dokumentem podczas pozyskiwania danych. |
NumberOfRUs |
Ma zastosowanie tylko wtedy, gdy kontener jeszcze nie istnieje i należy go utworzyć podczas wykonywania. |
Pobierz pełną przykładową aplikację na platformie .NET.
Java
Przykładowe zastosowanie
Poniższa przykładowa aplikacja ilustruje sposób używania pakietu GraphBulkExecutor. Przykłady używają adnotacji obiektu domeny lub obiektów POJO (zwykłego starego obiektu Java) bezpośrednio. Zalecamy wypróbowanie obu metod w celu określenia, który lepiej spełnia wymagania dotyczące implementacji i wydajności.
Clone
Aby użyć przykładu, uruchom następujące polecenie:
git clone https://github.com/Azure-Samples/azure-cosmos-graph-bulk-executor.git
Aby uzyskać przykład, przejdź do strony .\azure-cosmos-graph-bulk-executor\java\
.
Wymagania wstępne
Aby uruchomić ten przykład, musisz mieć następujące oprogramowanie:
- OpenJDK 11
- Maven
- Konto usługi Azure Cosmos DB skonfigurowane do korzystania z interfejsu API języka Gremlin
Przykład
private static void executeWithPOJO(Stream<GremlinVertex> vertices,
Stream<GremlinEdge> edges,
boolean createDocs) {
results.transitionState("Configure Database");
UploadWithBulkLoader loader = new UploadWithBulkLoader();
results.transitionState("Write Documents");
loader.uploadDocuments(vertices, edges, createDocs);
}
Konfigurowanie
Aby uruchomić przykład, zapoznaj się z następującą konfiguracją i zmodyfikuj ją zgodnie z potrzebami.
Plik /resources/application.properties definiuje dane wymagane do skonfigurowania usługi Azure Cosmos DB. Wymagane wartości opisano w poniższej tabeli:
Właściwość | Opis |
---|---|
sample.sql.host |
Wartość dostarczana przez usługę Azure Cosmos DB. Upewnij się, że używasz identyfikatora URI zestawu .NET SDK, który znajdziesz w sekcji Przegląd konta usługi Azure Cosmos DB. |
sample.sql.key |
Klucz podstawowy lub pomocniczy można uzyskać z sekcji Klucze konta usługi Azure Cosmos DB. |
sample.sql.database.name |
Nazwa bazy danych na koncie usługi Azure Cosmos DB do uruchomienia przykładu. Jeśli baza danych nie zostanie znaleziona, przykładowy kod go utworzy. |
sample.sql.container.name |
Nazwa kontenera w bazie danych do uruchomienia przykładu. Jeśli kontener nie zostanie znaleziony, zostanie utworzony przykładowy kod. |
sample.sql.partition.path |
Jeśli musisz utworzyć kontener, użyj tej wartości, aby zdefiniować ścieżkę partitionKey . |
sample.sql.allow.throughput |
Kontener zostanie zaktualizowany w celu użycia wartości przepływności zdefiniowanej tutaj. Jeśli eksplorujesz różne opcje przepływności, aby spełnić wymagania dotyczące wydajności, pamiętaj o zresetowaniu przepływności w kontenerze po zakończeniu eksploracji. Istnieją koszty związane z pozostawieniem kontenera aprowizowanego z wyższą przepływnością. |
Wykonaj polecenie
Po zmodyfikowaniu konfiguracji zgodnie ze środowiskiem uruchom następujące polecenie:
mvn clean package
W celu zwiększenia bezpieczeństwa można również uruchomić testy integracji, zmieniając skipIntegrationTests
wartość w pliku pom.xml na false
.
Po pomyślnym uruchomieniu testów jednostkowych możesz uruchomić przykładowy kod:
java -jar target/azure-cosmos-graph-bulk-executor-1.0-jar-with-dependencies.jar -v 1000 -e 10 -d
Uruchomienie poprzedniego polecenia wykonuje przykład z małą partią (1000 wierzchołków i około 5000 krawędzi). Użyj argumentów wiersza polecenia w poniższych sekcjach, aby dostosować woluminy, które są uruchamiane i która przykładowa wersja ma zostać uruchomiona.
Argumenty wiersza polecenia
Podczas uruchamiania tego przykładu dostępnych jest kilka argumentów wiersza polecenia, zgodnie z opisem w poniższej tabeli:
Argument | Opis |
---|---|
--vertexCount (-v ) |
Informuje aplikację o liczbą wierzchołków do wygenerowania. |
--edgeMax (-e ) |
Informuje aplikację o maksymalnej liczbie krawędzi do wygenerowania dla każdego wierzchołka. Generator losowo wybiera liczbę z zakresu od 1 do podanej wartości. |
--domainSample (-d ) |
Informuje aplikację o uruchomieniu przykładu przy użyciu struktur domeny osoby i relacji zamiast GraphBulkExecutors obiektów , GremlinVertex i GremlinEdge POJOs. |
--createDocuments (-c ) |
Informuje aplikację o użyciu create operacji. Jeśli argument nie jest obecny, aplikacja domyślnie używa upsert operacji. |
Szczegółowe informacje o przykładach
Wierzchołek osoby
Klasa person to prosty obiekt domeny, który został ozdobiony kilkoma adnotacjami, aby ułatwić przekształcenie w GremlinVertex
klasę, zgodnie z opisem w poniższej tabeli:
Adnotacja klasy | Opis |
---|---|
GremlinVertex |
Używa opcjonalnego label parametru do zdefiniowania wszystkich wierzchołków tworzonych przy użyciu tej klasy. |
GremlinId |
Służy do definiowania, które pole będzie używane jako ID wartość. Nazwa pola w klasie person ma identyfikator, ale nie jest wymagana. |
GremlinProperty |
Użyto w email polu, aby zmienić nazwę właściwości, gdy jest ona przechowywana w bazie danych. |
GremlinPartitionKey |
Służy do definiowania, które pole w klasie zawiera klucz partycji. Podana nazwa pola powinna być zgodna z wartością zdefiniowaną przez ścieżkę partycji w kontenerze. |
GremlinIgnore |
Służy do wykluczania isSpecial pola z właściwości zapisywanej w bazie danych. |
Klasa RelationshipEdge
Klasa RelationshipEdge
jest wszechstronnym obiektem domeny. Za pomocą adnotacji etykiety na poziomie pola można utworzyć dynamiczną kolekcję typów krawędzi, jak pokazano w poniższej tabeli:
Adnotacja klasy | Opis |
---|---|
GremlinEdge |
Dekoracja GremlinEdge w klasie definiuje nazwę pola dla określonego klucza partycji. Podczas tworzenia dokumentu brzegowego przypisana wartość pochodzi z informacji o wierzchołku źródłowym. |
GremlinEdgeVertex |
Definiowane GremlinEdgeVertex są dwa wystąpienia obiektu , po jednym dla każdej strony krawędzi (źródło i lokalizacja docelowa). Nasz przykład zawiera typ danych pola jako GremlinEdgeVertexInfo . Informacje dostarczone przez klasę GremlinEdgeVertex są wymagane do poprawnego utworzenia krawędzi w bazie danych. Inną opcją jest posiadanie typu danych wierzchołków jako klasy, która została ozdobiona GremlinVertex adnotacjami. |
GremlinLabel |
Przykładowa krawędź używa pola do zdefiniowania label wartości. Umożliwia zdefiniowanie różnych etykiet, ponieważ używa tej samej klasy domeny podstawowej. |
Objaśnione dane wyjściowe
Konsola kończy uruchamianie za pomocą ciągu JSON opisującego czasy wykonywania przykładu. Ciąg JSON zawiera następujące informacje:
Ciąg JSON | Opis |
---|---|
startTime | Czas System.nanoTime() rozpoczęcia procesu. |
endTime | Po System.nanoTime() zakończeniu procesu. |
durationInNanoSeconds | Różnica między wartościami endTime i startTime . |
durationInMinutes | Wartość durationInNanoSeconds , przekonwertowana na minuty. Wartość durationInMinutes jest reprezentowana jako liczba zmiennoprzecinkowa, a nie wartość czasu. Na przykład wartość 2,5 reprezentuje 2 minuty i 30 sekund. |
vertexCount | Ilość wygenerowanych wierzchołków, która powinna być zgodna z wartością przekazywaną do wykonywania wiersza polecenia. |
edgeCount | Ilość wygenerowanych krawędzi, która nie jest statyczna i jest tworzona z elementem losowości. |
Wyjątek | Wypełniane tylko wtedy, gdy podczas próby uruchomienia zostanie zgłoszony wyjątek. |
Tablica States
Tablica states zawiera szczegółowe informacje o tym, jak długo trwa każdy krok w ramach wykonywania. Kroki opisano w poniższej tabeli:
Krok wykonywania | Opis |
---|---|
Tworzenie przykładowych wierzchołków | Czas potrzebny na utworzenie szkieletu żądanej liczby obiektów osób. |
Tworzenie przykładowych krawędzi | Czas potrzebny na utworzenie szkieletu obiektów relacji. |
Konfigurowanie bazy danych | Czas potrzebny na skonfigurowanie bazy danych na podstawie wartości podanych w pliku application.properties . |
Pisanie dokumentów | Czas potrzebny na zapisanie dokumentów w bazie danych. |
Każdy stan zawiera następujące wartości:
Wartość stanu | Opis |
---|---|
stateName |
Nazwa zgłaszanego stanu. |
startTime |
Wartość System.nanoTime() po uruchomieniu stanu. |
endTime |
System.nanoTime() Wartość po zakończeniu stanu. |
durationInNanoSeconds |
Różnica między wartościami endTime i startTime . |
durationInMinutes |
Wartość durationInNanoSeconds , przekonwertowana na minuty. Wartość durationInMinutes jest reprezentowana jako liczba zmiennoprzecinkowa, a nie wartość czasu. Na przykład wartość 2,5 reprezentuje 2 minuty i 30 sekund. |
Następne kroki
- Aby uzyskać więcej informacji na temat klas i metod zdefiniowanych w tej przestrzeni nazw, zapoznaj się z dokumentacją bulkExecutor Java open source.
- Zobacz Zbiorcze importowanie danych do konta interfejsu API SQL usługi Azure Cosmos DB przy użyciu zestawu SDK platformy .NET . Ta dokumentacja trybu zbiorczego jest częścią zestawu SDK platformy .NET w wersji 3.