OrientDB - Szybki przewodnik
OrientDB to system zarządzania bazami danych NoSQL typu Open Source. NoSQL Databasezapewnia mechanizm przechowywania i odzyskiwania danych NO-relacyjnych lub NON-relacyjnych, które odnoszą się do danych innych niż dane tabelaryczne, takich jak dane dokumentów lub dane wykresów. Bazy danych NoSQL są coraz częściej wykorzystywane w Big Data i aplikacjach internetowych czasu rzeczywistego. Systemy NoSQL są czasami nazywane „nie tylko SQL”, aby podkreślić, że mogą obsługiwać języki zapytań podobne do SQL.
OrientDB należy również do rodziny NoSQL. OrientDB to rozproszona baza danych graficznych drugiej generacji z elastycznością dokumentów w jednym produkcie z otwartym źródłem licencji Apache 2. Przed OrientDB na rynku było kilka baz danych NoSQL, z których jedna to MongoDB.
MongoDB vs OrientDB
MongoDB i OrientDB zawierają wiele wspólnych funkcji, ale silniki są zasadniczo różne. MongoDB to czysta baza danych dokumentów, a OrientDB to hybrydowy dokument z silnikiem graficznym.
funkcje | MongoDB | OrientDB |
---|---|---|
Relationships | Używa RDBMS JOINS do tworzenia relacji między jednostkami. Ma wysoki koszt w czasie wykonywania i nie skaluje się, gdy wzrasta skala bazy danych. | Osadza i łączy dokumenty, takie jak relacyjna baza danych. Wykorzystuje bezpośrednie, superszybkie łącza zaczerpnięte ze świata grafowych baz danych. |
Fetch Plan | Kosztowne operacje DOŁĄCZ. | Z łatwością zwraca pełny wykres z połączonymi dokumentami. |
Transactions | Nie obsługuje transakcji ACID, ale obsługuje operacje atomowe. | Obsługuje transakcje ACID, a także operacje atomowe. |
Query language | Posiada własny język oparty na JSON. | Język zapytań jest oparty na SQL. |
Indexes | Używa algorytmu B-Tree dla wszystkich indeksów. | Obsługuje trzy różne algorytmy indeksowania, dzięki czemu użytkownik może osiągnąć najlepszą wydajność. |
Storage engine | Wykorzystuje technikę mapowania pamięci. | Używa nazw aparatu magazynowania LOKALNE i PLOKALNE. |
OrientDB to pierwszy wielomodelowy open source NoSQL DBMS, który łączy moc wykresów i elastyczność dokumentów w skalowalną, wydajną operacyjną bazę danych.
Plik instalacyjny OrientDB jest dostępny w dwóch wersjach -
Community Edition - Edycja społeczności OrientDB jest udostępniana przez Apache na licencji 0.2 jako open source
Enterprise Edition- Edycja OrientDB dla przedsiębiorstw została wydana jako oprogramowanie zastrzeżone, oparte na wydaniu społecznościowym. Służy jako rozszerzenie wydania społecznościowego.
Ten rozdział wyjaśnia procedurę instalacji edycji społeczności OrientDB, ponieważ jest to oprogramowanie typu open source.
Wymagania wstępne
Zarówno wersje Community, jak i Enterprise mogą działać w dowolnym systemie operacyjnym, który implementuje wirtualną maszynę języka Java (JVM). OrientDB wymaga oprogramowania Java w wersji 1.7 lub nowszej.
Wykonaj poniższe czynności, aby pobrać i zainstalować OrientDB w swoim systemie.
Krok 1 - Pobierz plik OrientDB Binary Setup
OrientDB zawiera wbudowany plik instalacyjny do zainstalowania bazy danych w systemie. Zapewnia różne wstępnie skompilowane pakiety binarne (pakiety tarowane lub spakowane) dla różnych systemów operacyjnych. Możesz pobrać pliki OrientDB, korzystając z łącza Pobierz OrientDB .
Poniższy zrzut ekranu przedstawia stronę pobierania OrientDB. Możesz pobrać spakowany lub tarowany plik, klikając odpowiednią ikonę systemu operacyjnego.
Podczas pobierania otrzymasz pakiet binarny w swoim Downloads teczka.
Krok 2 - Rozpakuj i zainstaluj OrientDB
Poniżej przedstawiono procedurę wyodrębniania i instalowania bazy danych OrientDB dla różnych systemów operacyjnych.
W systemie Linux
Po pobraniu otrzymasz orientdb-community-2.1.9.tar.gz plik w swoim Downloadsteczka. Możesz użyć następującego polecenia, aby wyodrębnić plik tarred.
$ tar –zxvf orientdb-community-2.1.9.tar.gz
Możesz użyć następującego polecenia, aby przenieść wszystkie pliki bibliotek OrientDB z orientdbcommunity-2.1.9 to /opt/orientdb/informator. Tutaj używamy polecenia super użytkownika (sudo), dlatego musisz podać hasło superużytkownika, aby wykonać następujące polecenie.
$ sudo mv orientdb-community-2.1.9 /opt/orientdb
Aby zarejestrować plik orientdb polecenie i serwer Orient.
$ export ORIENTDB_HoME = /opt/orientdb $ export PATH = $PATH:$ORIENTDB_HOME/bin
W systemie Windows
Po pobraniu otrzymasz orientdb-community-2.1.9.zip plik w swoim Downloadsteczka. Rozpakuj plik zip za pomocą programu do rozpakowywania zip.
Przenieś wyodrębniony folder do C:\ informator.
Utwórz dwie zmienne środowiskowe ORIENTDB_HOME i zmienne PATH z następującymi podanymi wartościami.
ORIENT_HOME = C:\orientdb-community-2.1.9
PATH = C:\orientdb-community-2.1.9\bin
Krok 3 - Konfiguracja serwera OrientDB jako usługi
Postępując zgodnie z powyższymi krokami, możesz korzystać z wersji OrientDB na komputery stacjonarne. Serwer bazy danych OrientDB można uruchomić jako usługę, wykonując następujące czynności. Procedura różni się w zależności od systemu operacyjnego.
W systemie Linux
OrientDB udostępnia plik skryptu o nazwie orientdb.shuruchomić bazę danych jako demon. Możesz go znaleźć w katalogu bin / katalogu instalacyjnego OrientDB, czyli $ ORIENTDB_HOME / bin / orientdb.sh.
Przed uruchomieniem pliku skryptu musisz dokonać edycji orientdb.shplik do definiowania dwóch zmiennych. Jeden jestORIENTDB_DIR który definiuje ścieżkę do katalogu instalacyjnego (/opt/orientdb), a druga to ORIENTDB_USER który definiuje nazwę użytkownika, dla której chcesz uruchomić OrientDB w następujący sposób.
ORIENTDB_DIR = "/opt/orientdb"
ORIENTDB_USER = "<username you want to run OrientDB>"
Użyj następującego polecenia, aby skopiować orientdb.sh plik do /etc/init.d/katalog do zainicjowania i uruchomienia skryptu. Tutaj używamy polecenia super użytkownika (sudo), dlatego musisz podać hasło superużytkownika, aby wykonać następujące polecenie.
$ sudo cp $ORIENTDB_HOME/bin/orientdb.sh /etc/init.d/orientdb
Użyj następującego polecenia, aby skopiować plik console.sh z katalogu instalacyjnego OrientDB $ORIENTDB_HOME/bin do katalogu systemowego bin, czyli /usr/bin dostęp do konsoli Orient DB.
$ sudo cp $ ORIENTDB_HOME/bin/console.sh /usr/bin/orientdb
Użyj następującego polecenia, aby uruchomić serwer bazy danych ORIENTDB jako usługę. Tutaj musisz podać hasło odpowiedniego użytkownika, które wspomniałeś w pliku orientdb.sh, aby uruchomić serwer.
$ service orientdb start
Użyj następującego polecenia, aby dowiedzieć się, na którym PID działa demon serwera OrientDB.
$ service orientdb status
Użyj następującego polecenia, aby zatrzymać demona serwera OrientDB. Tutaj musisz podać hasło odpowiedniego użytkownika, które wspominasz w pliku orientdb.sh, aby zatrzymać serwer.
$ service orientdb stop
W systemie Windows
OrientDB jest aplikacją serwerową, dlatego przed rozpoczęciem zamykania procesu wirtualnej maszyny Java musi wykonać kilka zadań. Jeśli chcesz ręcznie zamknąć serwer OrientDB, musisz wykonaćshutdown.batplik. Jednak instancje serwera nie zatrzymują się poprawnie, gdy system nagle się wyłącza bez wykonywania powyższego skryptu. Wywoływane są programy sterowane przez system operacyjny z zestawem określonych sygnałówservices w systemie Windows.
Musimy użyć Apache Common Daemonktóre umożliwiają użytkownikom systemu Windows pakowanie aplikacji Java jako usługi systemu Windows. Poniżej przedstawiono procedurę pobierania i rejestrowania wspólnego demona Apache.
Kliknij poniższe łącze, aby uzyskać dostęp do Common Daemons Apache dla systemu Windows .
Kliknij common-daemon-1.0.15-bin-windows pobrać.
Rozpakuj plik common-daemon-1.0.15-bin-windowsinformator. Po wyodrębnieniu znajdzieszprunsrv.exe i prunmgr.exepliki w katalogu. W tych -
prunsrv.exe plik jest aplikacją usługową do uruchamiania aplikacji jako usług.
prunmgr.exe file to aplikacja służąca do monitorowania i konfigurowania usług systemu Windows.
Przejdź do folderu instalacyjnego OrientDB → utwórz nowy katalog i nadaj mu nazwę service.
Skopiuj plik prunsrv.exe i prunmgr .exe wklej go do katalogu usług.
Aby skonfigurować OrientDB jako usługę Windows, musisz wykonać krótki skrypt, który używa prusrv.exe jako usługi Windows.
Przed zdefiniowaniem usług systemu Windows należy zmienić nazwy prunsrv i prunmgr zgodnie z nazwą usługi. Na przykład odpowiednio OrientDBGraph i OrientDBGraphw. Tutaj OrientDBGraph to nazwa usługi.
Skopiuj następujący skrypt do pliku o nazwie installService.bat i umieść go w %ORIENTDB_HOME%\service\ informator.
:: OrientDB Windows Service Installation
@echo off
rem Remove surrounding quotes from the first parameter
set str=%~1
rem Check JVM DLL location parameter
if "%str%" == "" goto missingJVM
set JVM_DLL=%str%
rem Remove surrounding quotes from the second parameter
set str=%~2
rem Check OrientDB Home location parameter
if "%str%" == "" goto missingOrientDBHome
set ORIENTDB_HOME=%str%
set CONFIG_FILE=%ORIENTDB_HOME%/config/orientdb-server-config.xml
set LOG_FILE = %ORIENTDB_HOME%/config/orientdb-server-log.properties
set LOG_CONSOLE_LEVEL = info
set LOG_FILE_LEVEL = fine
set WWW_PATH = %ORIENTDB_HOME%/www
set ORIENTDB_ENCODING = UTF8
set ORIENTDB_SETTINGS = -Dprofiler.enabled = true
-Dcache.level1.enabled = false Dcache.level2.strategy = 1
set JAVA_OPTS_SCRIPT = -XX:+HeapDumpOnOutOfMemoryError
rem Install service
OrientDBGraphX.X.X.exe //IS --DisplayName="OrientDB GraphEd X.X.X" ^
--Description = "OrientDB Graph Edition, aka GraphEd, contains OrientDB server
integrated with the latest release of the TinkerPop Open Source technology
stack supporting property graph data model." ^
--StartClass = com.orientechnologies.orient.server.OServerMain
-StopClass = com.orientechnologies.orient.server.OServerShutdownMain ^
--Classpath = "%ORIENTDB_HOME%\lib\*" --JvmOptions
"Dfile.Encoding = %ORIENTDB_ENCODING%; Djava.util.logging.config.file = "%LOG_FILE%";
Dorientdb.config.file = "%CONFIG_FILE%"; -Dorientdb.www.path = "%WWW_PATH%";
Dlog.console.level = %LOG_CONSOLE_LEVEL%; -Dlog.file.level = %LOG_FILE_LEVEL%;
Dorientdb.build.number = "@BUILD@"; -DORIENTDB_HOME = %ORIENTDB_HOME%" ^
--StartMode = jvm --StartPath = "%ORIENTDB_HOME%\bin" --StopMode = jvm
-StopPath = "%ORIENTDB_HOME%\bin" --Jvm = "%JVM_DLL%"
-LogPath = "%ORIENTDB_HOME%\log" --Startup = auto
EXIT /B
:missingJVM
echo Insert the JVM DLL location
goto printUsage
:missingOrientDBHome
echo Insert the OrientDB Home
goto printUsage
:printUsage
echo usage:
echo installService JVM_DLL_location OrientDB_Home
EXIT /B
Skrypt wymaga dwóch parametrów -
Lokalizacja jvm.dll, na przykład C: \ ProgramFiles \ java \ jdk1.8.0_66 \ jre \ bin \ server \ jvm.dll
Lokalizacja instalacji OrientDB dla np. C: \ orientdb-community-2.1.9
Usługa jest instalowana po uruchomieniu pliku OrientDBGraph.exe (Original prunsrv) i dwukrotnym kliknięciu go.
Użyj następującego polecenia, aby zainstalować usługi w systemie Windows.
> Cd %ORIENTDB_HOME%\service
> installService.bat "C:\Program Files\Java\jdk1.8.0_66\jre\bin\server
\jvm.dll" C:\orientdb-community-2.1.9
Otwórz usługi Menedżera zadań, znajdziesz następujący zrzut ekranu z zarejestrowaną nazwą usługi.
Krok 4 - Weryfikacja instalacji OrientDB
Ten krok weryfikuje instalację serwera bazy danych OrientDB, wykonując następujące kroki.
- Uruchom serwer.
- Uruchom konsolę.
- Uruchom studio.
Jest to unikalne w zależności od systemu operacyjnego.
W systemie Linux
Postępuj zgodnie z podaną procedurą weryfikacji instalacji OrientDB w systemie Linux.
Running the server - Możesz użyć następującego polecenia, aby uruchomić serwer.
$ cd $ORIENTDB_HOME/bin $ ./server.sh
Lub możesz użyć następującego polecenia, aby uruchomić serwer OrientDB jako demona UNIX.
$ service orientdb start
Jeśli zostanie pomyślnie zainstalowany, otrzymasz następujące dane wyjściowe.
.
.` `
, `:.
`,` ,:`
.,. :,,
.,, ,,,
. .,.::::: ```` ::::::::: :::::::::
,` .::,,,,::.,,,,,,`;; .: :::::::::: ::: :::
`,. ::,,,,,,,:.,,.` ` .: ::: ::: ::: :::
,,:,:,,,,,,,,::. ` ` `` .: ::: ::: ::: :::
,,:.,,,,,,,,,: `::, ,, ::,::` : :,::` :::: ::: ::: ::: :::
,:,,,,,,,,,,::,: ,, :. : :: : .: ::: ::: :::::::
:,,,,,,,,,,:,:: ,, : : : : .: ::: ::: :::::::::
` :,,,,,,,,,,:,::, ,, .:::::::: : : .: ::: ::: ::: :::
`,...,,:,,,,,,,,,: .:,. ,, ,, : : .: ::: ::: ::: :::
.,,,,::,,,,,,,: `: , ,, : ` : : .: ::: ::: ::: :::
...,::,,,,::.. `: .,, :, : : : .: ::::::::::: ::: :::
,::::,,,. `: ,, ::::: : : .: ::::::::: ::::::::::
,,:` `,,.
,,, .,`
,,. `, GRAPH DATABASE
`` `.
`` orientdb.com
`
2016-01-20 19:17:21:547 INFO OrientDB auto-config DISKCACHE = 1,
649MB (heap = 494MB os = 4, 192MB disk = 199, 595MB) [orientechnologies]
2016-01-20 19:17:21:816 INFO Loading configuration from:
/opt/orientdb/config/orientdb-server-config.xml... [OServerConfigurationLoaderXml]
2016-01-20 19:17:22:213 INFO OrientDB Server v2.1.9-SNAPSHOT
(build 2.1.x@r; 2016-01-07 10:51:24+0000) is starting up... [OServer]
2016-01-20 19:17:22:220 INFO Databases directory: /opt/orientdb/databases [OServer]
2016-01-20 19:17:22:361 INFO Port 0.0.0.0:2424 busy,
trying the next available... [OServerNetworkListener]
2016-01-20 19:17:22:362 INFO Listening binary connections on 0.0.0.0:2425
(protocol v.32, socket = default) [OServerNetworkListener]
...
2016-01-20 19:17:22:614 INFO Installing Script interpreter. WARN:
authenticated clients can execute any kind of code into the server
by using the following allowed languages:
[sql] [OServerSideScriptInterpreter]
2016-01-20 19:17:22:615 INFO OrientDB Server v2.1.9-SNAPSHOT
(build 2.1.x@r; 2016-01-07 10:51:24+0000) is active. [OServer]
Running the console - Możesz użyć następującego polecenia, aby uruchomić OrientDB pod konsolą.
$ orientdb
Jeśli zostanie pomyślnie zainstalowany, otrzymasz następujące dane wyjściowe.
OrientDB console v.2.1.9-SNAPSHOT (build 2.1.x@r; 2016-01-07 10:51:24+0000) www.orientdb.com
Type 'help' to display all the supported commands.
Installing extensions for GREMLIN language v.2.6.0
orientdb>
Running the Studio - Po uruchomieniu serwera możesz skorzystać z następującego adresu URL (http://localhost:2480/) w Twojej przeglądarce. Otrzymasz następujący zrzut ekranu.
W systemie Windows
Postępuj zgodnie z podaną procedurą weryfikacji instalacji OrientDB w systemie Windows.
Running the server - Możesz użyć następującego polecenia, aby uruchomić serwer.
> cd %ORIENTDB_HOME%\bin
> ./server.bat
Jeśli zostanie pomyślnie zainstalowany, otrzymasz następujące dane wyjściowe.
.
.` `
, `:.
`,` ,:`
.,. :,,
.,, ,,,
. .,.::::: ```` ::::::::: :::::::::
,` .::,,,,::.,,,,,,`;; .: :::::::::: ::: :::
`,. ::,,,,,,,:.,,.` ` .: ::: ::: ::: :::
,,:,:,,,,,,,,::. ` ` `` .: ::: ::: ::: :::
,,:.,,,,,,,,,: `::, ,, ::,::` : :,::` :::: ::: ::: ::: :::
,:,,,,,,,,,,::,: ,, :. : :: : .: ::: ::: :::::::
:,,,,,,,,,,:,:: ,, : : : : .: ::: ::: :::::::::
` :,,,,,,,,,,:,::, ,, .:::::::: : : .: ::: ::: ::: :::
`,...,,:,,,,,,,,,: .:,. ,, ,, : : .: ::: ::: ::: :::
.,,,,::,,,,,,,: `: , ,, : ` : : .: ::: ::: ::: :::
...,::,,,,::.. `: .,, :, : : : .: ::::::::::: ::: :::
,::::,,,. `: ,, ::::: : : .: ::::::::: ::::::::::
,,:` `,,.
,,, .,`
,,. `, GRAPH DATABASE
`` `.
`` orientdb.com
`
2016-01-20 19:17:21:547 INFO OrientDB auto-config DISKCACHE = 1,649MB
(heap = 494MB os = 4, 192MB disk = 199, 595MB) [orientechnologies]
2016-01-20 19:17:21:816 INFO Loading configuration from:
/opt/orientdb/config/orientdb-server-config.xml...
[OServerConfigurationLoaderXml]
...
2016-01-20 19:17:22:615 INFO OrientDB Server v2.1.9-SNAPSHOT
(build 2.1.x@r; 2016-01-07 10:51:24+0000) is active. [OServer]
Running the console - Możesz użyć następującego polecenia, aby uruchomić OrientDB w konsoli.
> %ORIENTDB_HOME%\bin\console.bat
Jeśli zostanie pomyślnie zainstalowany, otrzymasz następujące dane wyjściowe.
OrientDB console v.2.1.9-SNAPSHOT (build 2.1.x@r; 2016-01-07 10:51:24+0000) www.orientdb.com
Type 'help' to display all the supported commands.
Installing extensions for GREMLIN language v.2.6.0
orientdb\>
Running the Studio - Po uruchomieniu serwera możesz skorzystać z następującego adresu URL (http://localhost:2480/) w Twojej przeglądarce. Otrzymasz następujący zrzut ekranu.
Główną cechą OrientDB jest obsługa obiektów wielomodelowych, tj. Obsługuje różne modele, takie jak Dokument, Wykres, Klucz / Wartość i Obiekt rzeczywisty. Zawiera oddzielne API do obsługi wszystkich tych czterech modeli.
Model dokumentu
Model dokumentu terminologicznego należy do bazy danych NoSQL. Oznacza to, że dane są przechowywane w Dokumentach, a grupa dokumentów nosi nazwęCollection. Z technicznego punktu widzenia dokument oznacza zestaw par klucz / wartość lub określany również jako pola lub właściwości.
OrientDB używa pojęć, takich jak klasy, klastry i łącze do przechowywania, grupowania i analizowania dokumentów.
Poniższa tabela ilustruje porównanie między modelem relacyjnym, modelem dokumentu i modelem dokumentu OrientDB -
Model relacyjny | Model dokumentu | Model dokumentu OrientDB |
---|---|---|
Stół | Kolekcja | Klasa lub klaster |
Rząd | Dokument | Dokument |
Kolumna | Para klucz / wartość | Pole dokumentu |
Związek | Niedostępne | Połączyć |
Model wykresu
Struktura danych wykresu to model danych, który może przechowywać dane w postaci wierzchołków (węzłów) połączonych ze sobą krawędziami (łukami). Idea bazy danych grafów OrientDB pochodzi z grafu własności. Wierzchołek i krawędź to główne artefakty modelu Graph. Zawierają właściwości, które mogą sprawiać, że będą wyglądać podobnie do dokumentów.
W poniższej tabeli przedstawiono porównanie między modelem wykresu, relacyjnym modelem danych i modelem wykresu OrientDB.
Model relacyjny | Model wykresu | Model wykresu OrientDB |
---|---|---|
Stół | Klasa wierzchołków i krawędzi | Klasa, która stanowi rozszerzenie „V” (dla wierzchołków) i „E” (dla krawędzi) |
Rząd | Wierzchołek | Wierzchołek |
Kolumna | Właściwość Vertex and Edge | Właściwość Vertex and Edge |
Związek | Brzeg | Brzeg |
Model klucz / wartość
Model klucz / wartość oznacza, że dane mogą być przechowywane w postaci pary klucz / wartość, przy czym wartości mogą być typu prostego i złożonego. Może obsługiwać dokumenty i elementy wykresów jako wartości.
W poniższej tabeli przedstawiono porównanie między modelem relacyjnym, modelem klucz / wartość i modelem klucz / wartość OrientDB.
Model relacyjny | Model klucz / wartość | Model klucz / wartość OrientDB |
---|---|---|
Stół | Wiadro | Klasa lub klaster |
Rząd | Para klucz / wartość | Dokument |
Kolumna | Niedostępne | Pole dokumentu lub właściwość Wierzchołek / Krawędź |
Związek | Niedostępne | Połączyć |
Model obiektowy
Ten model został odziedziczony przez programowanie zorientowane obiektowo i obsługuje Inheritance między typami (podtypy stanowią rozszerzenie nadtypów), Polymorphism kiedy odnosisz się do klasy bazowej i Direct binding from / to Obiekty używane w językach programowania.
Poniższa tabela ilustruje porównanie między modelem relacyjnym, modelem obiektowym i modelem obiektowym OrientDB.
Model relacyjny | Model obiektowy | Model obiektowy OrientDB |
---|---|---|
Stół | Klasa | Klasa lub klaster |
Rząd | Obiekt | Dokument lub wierzchołek |
Kolumna | Właściwość obiektu | Pole dokumentu lub właściwość Wierzchołek / Krawędź |
Związek | Wskaźnik | Połączyć |
Zanim przejdziemy dalej szczegółowo, lepiej poznać podstawową terminologię związaną z OrientDB. Poniżej znajduje się kilka ważnych terminologii.
Rekord
Najmniejsza jednostka, z której można ładować i przechowywać w bazie danych. Rekordy mogą być przechowywane w czterech typach.
- Document
- Rekord bajtów
- Vertex
- Edge
Identyfikator rekordu
Kiedy OrientDB generuje rekord, serwer bazy danych automatycznie przypisuje do rekordu identyfikator jednostki o nazwie RecordID (RID). Identyfikator RID wygląda następująco: # <klaster>: <pozycja>. <klaster> oznacza numer identyfikacyjny klastra, a <pozycja> oznacza bezwzględną pozycję rekordu w klastrze.
Dokumenty
Dokument jest najbardziej elastycznym typem rekordu dostępnym w OrientDB. Dokumenty są wpisywane miękko i są definiowane przez klasy schematu ze zdefiniowanym ograniczeniem, ale można również wstawić dokument bez schematu, tj. Obsługuje również tryb bez schematu.
Dokumenty można łatwo obsługiwać poprzez eksport i import w formacie JSON. Na przykład spójrz na następujący przykładowy dokument JSON. Określa szczegóły dokumentu.
{
"id" : "1201",
"name" : "Jay",
"job" : "Developer",
"creations" : [
{
"name" : "Amiga",
"company" : "Commodore Inc."
},
{
"name" : "Amiga 500",
"company" : "Commodore Inc."
}
]
}
RecordBytes
Typ rekordu jest taki sam, jak typ BLOB w RDBMS. OrientDB może ładować i przechowywać dokument Typ rekordu wraz z danymi binarnymi.
Wierzchołek
Baza danych OrientDB to nie tylko baza danych dokumentów, ale także baza danych Graph. Nowe koncepcje, takie jak Vertex i Edge, służą do przechowywania danych w postaci wykresu. W grafowych bazach danych najbardziej podstawową jednostką danych jest węzeł, który w OrientDB nazywany jest wierzchołkiem. Vertex przechowuje informacje dla bazy danych.
Brzeg
Istnieje oddzielny typ rekordu zwany Edge, który łączy jeden wierzchołek z drugim. Krawędzie są dwukierunkowe i mogą łączyć tylko dwa wierzchołki. W OrientDB istnieją dwa rodzaje krawędzi, jeden jest zwykły, a drugi lekki.
Klasa
Klasa jest rodzajem modelu danych i koncepcją zaczerpniętą z paradygmatu programowania obiektowego. W oparciu o tradycyjny model bazy dokumentów dane przechowywane są w postaci kolekcji, natomiast w modelu relacyjnej bazy danych dane są przechowywane w tabelach. OrientDB jest zgodny z interfejsem API dokumentów wraz z paradygmatem OPPS. Zgodnie z koncepcją klasa w OrientDB ma najbliższy związek z tabelą w relacyjnych bazach danych, ale (w przeciwieństwie do tabel) klasy mogą być bezschematyczne, pełne lub mieszane. Klasy mogą dziedziczyć po innych klasach, tworząc drzewa klas. Każda klasa ma własny klaster lub klastry (tworzone domyślnie, jeśli nie zostały zdefiniowane).
Grupa
Klaster to ważna koncepcja, która służy do przechowywania rekordów, dokumentów lub wierzchołków. W prostych słowach Cluster to miejsce, w którym przechowywana jest grupa rekordów. Domyślnie OrientDB utworzy jeden klaster na klasę. Wszystkie rekordy klasy są przechowywane w tym samym klastrze i mają taką samą nazwę jak klasa. W bazie danych można utworzyć do 32767 (2 ^ 15-1) klastrów.
Klasa CREATE to polecenie używane do tworzenia klastra o określonej nazwie. Po utworzeniu klastra można go użyć do zapisania rekordów, określając nazwę podczas tworzenia dowolnego modelu danych.
Relacje
OrientDB obsługuje dwa rodzaje relacji: przywoływane i osadzone. Referenced relationships oznacza, że przechowuje bezpośrednie łącze do obiektów docelowych relacji. Embedded relationshipsoznacza, że przechowuje relację w rekordzie, który go osadza. Ta zależność jest silniejsza niż relacja referencyjna.
Baza danych
Baza danych jest interfejsem umożliwiającym dostęp do rzeczywistego magazynu. Dział IT rozumie pojęcia wysokiego poziomu, takie jak zapytania, schematy, metadane, indeksy i tak dalej. OrientDB udostępnia również wiele typów baz danych. Aby uzyskać więcej informacji na temat tych typów, zobacz typy baz danych.
OrientDB obsługuje natywnie kilka typów danych. Poniżej znajduje się pełna tabela na ten sam temat.
Sr. No. | Rodzaj | Opis |
---|---|---|
1 | Boolean | Obsługuje tylko wartości True lub False. Java types: java.lang.Boolean Min: 0 Max: 1 |
2 | Liczba całkowita | 32-bitowe liczby całkowite ze znakiem. Java types: java.lang.Interger Min: -2,147,483,648 Max: +2,147,483,647 |
3 | Krótki | Małe 16-bitowe liczby całkowite ze znakiem. Java types: java.lang.short Min: -32,768 Max: 32,767 |
4 | Długo | Duże 64-bitowe liczby całkowite ze znakiem. Java types: java.lang.Long Min: -2 63 Max: +2 63 -1 |
5 | Pływak | Liczby dziesiętne. Java types: java.lang.Float : 2 -149 Max: ( 2-2-23 ) * 2, 127 |
6 | Podwójnie | Liczby dziesiętne z dużą dokładnością. Java types: Java.lang.Double. Min: 2 -1074 Max: ( 2-2-52 ) * 2 1023 |
7 | Data-godzina | Dowolna data z dokładnością do milisekund. Java types: java.util.Date |
8 | Strunowy | Dowolny łańcuch jako alfanumeryczna sekwencja znaków. Java types: java.lang.String |
9 | Dwójkowy | Może zawierać dowolną wartość jako tablicę bajtów. Java types: bajt [] Min: 0 Max: 2,147,483,647 |
10 | Osadzone | Rekord znajduje się wewnątrz właściciela. Zawarty rekord nie ma identyfikatora RecordId. Java types: ORecord |
11 | Lista osadzona | Dokumentacja znajduje się wewnątrz właściciela. Zawarte rekordy nie mają identyfikatorów rekordów i są dostępne tylko poprzez nawigację po rekordzie właściciela. Java types: Lista <obiekty> Min: 0 Max: 41 000 000 sztuk |
12 | Zestaw osadzony | Dokumentacja znajduje się wewnątrz właściciela. Zawarte rekordy nie mają identyfikatora RecordId i są dostępne tylko poprzez nawigację po rekordzie właściciela. Java types: ustaw <obiekty> Min: 0 Max: 41 000 000 sztuk |
13 | Mapa osadzona | Rekordy są zawarte wewnątrz właściciela jako wartości wpisów, podczas gdy klucze mogą być tylko łańcuchami. Zawarte rekordy nie mają identyfikatora RecordId i są dostępne tylko poprzez nawigację po rekordzie właściciela. Java types: Map <String, ORecord> Min: 0 Max: 41 000 000 sztuk |
14 | Połączyć | Link do innego rekordu. To typowa relacja jeden do jednego Java Types: ORID, <? rozszerza ORecord> Min: 1 Max: 32767: 2 ^ 63-1 |
15 | Lista linków | Linki do innych rekordów. Jest to typowa relacja jeden do wielu, w której przechowywane są tylko identyfikatory rekordów. Java types: Lista <? Rozszerza ORecord> Min: 0 Max: 41 000 000 sztuk |
16 | Zestaw linków | Linki do innych rekordów. To typowa relacja jeden do wielu. Java types: Ustaw <? rozszerza ORecord> Min: 0 Max: 41 000 000 sztuk |
17 | Mapa linków | Odnośniki do innych rekordów jako wartość wpisów, podczas gdy klucze mogą być tylko łańcuchami. To typowa relacja jeden do wielu. Przechowywane są tylko RecordIds. Java types: Map <String,? rozszerza Record> Min: 0 Max: 41 000 000 sztuk |
18 | Bajt | Pojedynczy bajt. Przydatne do przechowywania małych 8-bitowych liczb całkowitych ze znakiem. Java types: java.lang.Byte Min: -128 Max: +127 |
19 | Przejściowy | Każda wartość, która nie jest przechowywana w bazie danych. |
20 | Data | Dowolna data jako rok, miesiąc i dzień. Java Types: java.util.Date |
21 | Zwyczaj | Służy do przechowywania niestandardowego typu udostępniającego metody Marshalla i Unmarshall. Java types: OSerializableStream Min: 0 Max: x |
22 | Dziesiętny | Liczby dziesiętne bez zaokrąglania. Java types: java.math.BigDecimal |
23 | LinkBag | Lista RecordIds jako konkretny RidBag. Java types: ORidBag |
24 | Każdy | Nieokreślony typ, używany do określania kolekcji typu mieszanego i null. |
W kolejnych rozdziałach omówiono sposób korzystania z tych typów danych w OrientDB.
Konsola OrientDB to aplikacja Java stworzona do pracy z bazami danych OrientDB i instancjami serwera. Istnieje kilka trybów konsoli, które obsługuje OrientDB.
Tryb interaktywny
To jest tryb domyślny. Po prostu uruchom konsolę, wykonując następujący skryptbin/console.sh (lub bin/console.batw systemach MS Windows). Upewnij się, że masz uprawnienia do wykonywania.
OrientDB console v.1.6.6 www.orientechnologies.com
Type 'help' to display all the commands supported.
orientdb>
Po zakończeniu konsola jest gotowa do przyjmowania poleceń.
Tryb wsadowy
Aby wykonać polecenia w trybie wsadowym, uruchom następujące polecenie bin/console.sh (lub bin/console.bat w systemach MS Windows) skrypt przekazujący wszystkie polecenia oddzielone średnikiem „;”.
orientdb> console.bat "connect remote:localhost/demo;select * from profile"
Lub wywołaj skrypt konsoli, przekazując nazwę pliku w formacie tekstowym zawierającego listę poleceń do wykonania. Polecenia należy oddzielać średnikiem „;”.
Przykład
Command.txt zawiera listę poleceń, które chcesz wykonać za pomocą konsoli OrientDB. Następujące polecenie akceptuje pakiet poleceń z pliku command.txt.
orientdb> console.bat commands.txt
W trybie wsadowym można zignorować błędy, aby pozwolić skryptowi kontynuować wykonywanie, ustawiając zmienną „ignoreErrors” na wartość true.
orientdb> set ignoreErrors true
Włącz echo
Kiedy uruchamiasz polecenia konsoli w potoku, musisz je wyświetlić. Włącz „echo” poleceń, ustawiając je jako właściwość na początku. Poniżej przedstawiono składnię włączania właściwości echo w konsoli OrientDB.
orientdb> set echo true
Dokumentacja SQL bazy danych OrientDB zawiera kilka poleceń służących do tworzenia, modyfikowania i usuwania baz danych.
Poniższa instrukcja przedstawia podstawową składnię polecenia Utwórz bazę danych.
CREATE DATABASE <database-url> [<user> <password> <storage-type> [<db-type>]]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<database-url>- określa adres URL bazy danych. Adres URL składa się z dwóch części, z których jedna to <mode>, a druga to <path>.
<mode> - Określa tryb, tj. Tryb lokalny lub tryb zdalny.
<path> - Określa ścieżkę do bazy danych.
<user> - Określa użytkownika, którego chcesz połączyć z bazą danych.
<password> - określa hasło do połączenia z bazą danych.
<storage-type>- Określa typy przechowywania. Możesz wybrać pomiędzy PLOCAL i MEMORY.
Przykład
Możesz użyć następującego polecenia, aby utworzyć lokalną bazę danych o nazwie demo.
Orientdb> CREATE DATABASE PLOCAL:/opt/orientdb/databses/demo
Jeśli baza danych zostanie pomyślnie utworzona, otrzymasz następujące dane wyjściowe.
Database created successfully.
Current database is: plocal: /opt/orientdb/databases/demo
orientdb {db = demo}>
Baza danych to jeden z ważnych modeli danych z różnymi atrybutami, które można modyfikować zgodnie z własnymi wymaganiami.
Poniższa instrukcja przedstawia podstawową składnię polecenia Alter Database.
ALTER DATABASE <attribute-name> <attribute-value>
Gdzie <attribute-name> definiuje atrybut, który chcesz zmodyfikować i <attributevalue> określa wartość, jaką chcesz ustawić dla tego atrybutu.
W poniższej tabeli zdefiniowano listę obsługiwanych atrybutów służących do modyfikowania bazy danych.
Sr.No. | Nazwa atrybutu | Opis |
---|---|---|
1 | STATUS | Definiuje stan bazy danych między różnymi atrybutami. |
2 | IMPORTING | Sets the importing status. |
3 | DEFAULTCLUSTERID | Sets the default cluster using ID. By default it is 2. |
4 | DATEFORMAT | Sets the particular date format as default. By default it is "yyyy-MM-dd". |
5 | DATETIMEFORMAT | Sets the particular date time format as default. By default it is "yyyy-MM-dd HH:mm:ss". |
6 | TIMEZONE | Sets the particular time zone. By default it is Java Virtual Machine’s (JVM’s) default time zone. |
7 | LOCALECOUNTRY | Sets the default locale country. By default it is JVM’s default locale country. For example: "GB". |
8 | LOCALELANGUAGE | Sets the default locale language. By default it is JVM’s default locale language. For example: "en". |
9 | CHARSET | Sets the type of character set. By default it is JVM’s default charset. For example: "utf8". |
10 | CLUSTERSELECTION | Sets the default strategy used for selecting the cluster. These strategies are created along with the class creation. Supported strategies are default, roundrobin, and balanced. |
11 | MINIMUMCLUSTERS | Sets the minimum number of clusters to create automatically when a new class is created. By default it is 1. |
12 | CUSTOM | Sets the custom property. |
13 | VALIDATION | Disables or enables the validations for entire database. |
Example
From the version of OrientDB-2.2, the new SQL parser is added which will not allow the regular syntax in some cases. Therefore, we have to disable the new SQL parser (StrictSQL) in some cases. You can use the following Alter database command to disable the StrictSQL parser.
orientdb> ALTER DATABASE custom strictSQL = false
If the command is executed successfully, you will get the following output.
Database updated successfully
Like RDBMS, OrientDB also supports the backup and restore operations. While executing the backup operation, it will take all files of the current database into a compressed zip format using the ZIP algorithm. This feature (Backup) can be availed automatically by enabling the Automatic-Backup server plugin.
Taking backup of a database or exporting a database is the same, however, based on the procedure we have to know when to use backup and when to use export.
While taking backup, it will create a consistent copy of a database, all further write operations are locked and waiting to finish the backup process. In this operation, it will create a read-only backup file.
If you need the concurrent read and write operation while taking a backup you have to choose exporting a database instead of taking backup of a database. Export doesn’t lock the database and allows concurrent writes during the export process.
The following statement is the basic syntax of database backup.
./backup.sh <dburl> <user> <password> <destination> [<type>]
Following are the details about the options in the above syntax.
<dburl> − The database URL where the database is located either in the local or in the remote location.
<user> − Specifies the username to run the backup.
<password> − Provides the password for the particular user.
<destination> − Destination file location stating where to store the backup zip file.
<type> − Optional backup type. It has either of the two options.
Default − locks the database during the backup.
LVM − uses LVM copy-on-write snapshot in background.
Example
Take a backup of the database demo which is located in the local file system /opt/orientdb/databases/demo into a file named sample-demo.zip and located into the current directory.
You can use the following command to take a backup of the database demo.
$ backup.sh plocal: opt/orientdb/database/demo admin admin ./backup-demo.zip
Using Console
The same you can do using the OrientDB console. Before taking the backup of a particular database, you have to first connect to the database. You can use the following command to connect to the database named demo.
orientdb> CONNECT PLOCAL:/opt/orientdb/databases/demo admin admin
After connecting you can use the following command to take backup of the database into a file named ‘backup-demo.zip’ in the current directory.
orientdb {db=demo}> BACKUP DATABASE ./backup-demo.zip
If this command is executed successfully, you will get some success notifications along with following message.
Backup executed in 0.30 seconds
As like RDBMS, OrientDB also supports restoring operation. Only from the console mode, you can execute this operation successfully.
The following statement is the basic syntax for restoring operation.
orientdb> RESTORE DATABSE <url of the backup zip file>
Example
You have to perform this operation only from the console mode. Therefore, first you have to start the OrientDB console using the following OrientDB command.
$ orientdb
Then, connect to the respective database to restore the backup. You can use the following command to connect to the database named demo.
orientdb> CONNECT PLOCAL:/opt/orientdb/databases/demo admin admin
After successful connection, you can use the following command to restore the backup from ‘backup-demo.zip’ file. Before executing, make sure the backup-demo.zip file is placed in the current directory.
Orientdb {db = demo}> RESTORE DATABASE backup-demo.zip
If this command is executed successfully, you will get some success notifications along with the following message.
Database restored in 0.26 seconds
This chapter explains how to connect to a particular database from the OrientDB command line. It opens a database.
The following statement is the basic syntax of the Connect command.
CONNECT <database-url> <user> <password>
Following are the details about the options in the above syntax.
<database-url> − Defines the URL of the database. URL contains two parts one is <mode> and the second one is <path>.
<mode> − Defines the mode, i.e. local mode or remote mode.
<path> − Defines the path to the database.
<user> − Defines the user you want to connect to the database.
<password> − Defines the password for connecting to the database.
Example
We have already created a database named ‘demo’ in the previous chapters. In this example, we will connect to that using the user admin.
You can use the following command to connect to demo database.
orientdb> CONNECT PLOCAL:/opt/orientdb/databases/demo admin admin
If it is successfully connected, you will get the following output −
Connecting to database [plocal:/opt/orientdb/databases/demo] with user 'admin'…OK
Orientdb {db = demo}>
This chapter explains how to disconnect to a particular database from the OrientDB command line. It closes the currently open database.
The following statement is the basic syntax of the Disconnect command.
DISCONNECT
Note − You can use this command only after connecting to a particular database and it will only close the currently running database.
Example
In this example, we will use the same database named ‘demo’ that we created in the previous chapter. We will disconnect from demo database.
You can use the following command to disconnect the database.
orientdb {db = demo}> DISCONNECT
If it is successfully disconnected, you will get the following output −
Disconnecting to database [plocal:/opt/orientdb/databases/demo] with user 'admin'…OK
orientdb>
This chapter explains how to get information of a particular database from the OrientDB command line.
The following statement is the basic syntax of the Info command.
info
Note − You can use this command only after connecting to a particular database and it will retrieve the information of only the currently running database.
Example
In this example, we will use the same database named ‘demo’ that we created in the previous chapter. We will retrieve the basic information from demo database.
You can use the following command to disconnect the database.
orientdb {db = demo}> info
If it is successfully disconnected, you will get the following output.
Current database: demo (url = plocal:/opt/orientdb/databases/demo)
DATABASE PROPERTIES
--------------------------------+---------------------------------------------+
NAME | VALUE |
--------------------------------+---------------------------------------------+
Name | null |
Version | 14 |
Conflict Strategy | version |
Date format | yyyy-MM-dd |
Datetime format | yyyy-MM-dd HH:mm:ss |
Timezone | Asia/Kolkata |
Locale Country | IN |
Locale Language | en |
Charset | UTF-8 |
Schema RID | #0:1 |
Index Manager RID | #0:2 |
Dictionary RID | null |
--------------------------------+---------------------------------------------+
DATABASE CUSTOM PROPERTIES:
+-------------------------------+--------------------------------------------+
| NAME | VALUE |
+-------------------------------+--------------------------------------------+
| strictSql | true |
+-------------------------------+--------------------------------------------+
CLUSTERS (collections)
---------------------------------+-------+-------------------+----------------+
NAME | ID | CONFLICT STRATEGY | RECORDS |
---------------------------------+-------+-------------------+----------------+
W tym rozdziale wyjaśniono, jak uzyskać listę wszystkich baz danych w instancji z wiersza poleceń OrientDB.
Poniższa instrukcja przedstawia podstawową składnię polecenia info.
LIST DATABASES
Note - Możesz użyć tego polecenia tylko po połączeniu się z lokalnym lub zdalnym serwerem.
Przykład
Przed pobraniem listy baz danych musimy połączyć się z serwerem localhost poprzez serwer zdalny. Należy przypomnieć, że nazwa użytkownika i hasło do łączenia się z instancją localhost to odpowiednio guest i guest, które są skonfigurowane worintdb/config/orientdb-server-config.xml plik.
Aby połączyć się z instancją serwera bazy danych localhost, można użyć następującego polecenia.
orientdb> connect remote:localhost guest
Zapyta o hasło. Zgodnie z plikiem konfiguracyjnym hasło gościa jest również gościem. Jeśli zostanie pomyślnie podłączony, otrzymasz następujące wyjście.
Connecting to remote Server instance [remote:localhost] with user 'guest'...OK
orientdb {server = remote:localhost/}>
Po połączeniu się z serwerem bazy danych localhost możesz użyć następującego polecenia, aby wyświetlić listę baz danych.
orientdb {server = remote:localhost/}> list databases
Jeśli zostanie pomyślnie wykonany, otrzymasz następujący wynik -
Found 6 databases:
* demo (plocal)
* s2 (plocal)
* s1 (plocal)
* GratefulDeadConcerts (plocal)
* s3 (plocal)
* sample (plocal)
orientdb {server = remote:localhost/}>
Ilekroć chcesz, aby stan bazy danych był statyczny, oznacza to stan, w którym baza danych nie odpowiedziała na żadną operację odczytu i zapisu. Krótko mówiąc, baza danych jest w stanie zamrożenia.
Z tego rozdziału dowiesz się, jak zamrozić bazę danych z wiersza poleceń OrientDB.
Poniższa instrukcja przedstawia podstawową składnię polecenia freeze database.
FREEZE DATABASE
Note - Tego polecenia można użyć tylko po połączeniu się z określoną bazą danych w zdalnej lub lokalnej bazie danych.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy w poprzednim rozdziale. Zablokujemy tę bazę danych z CLI.
Możesz użyć następującego polecenia, aby zablokować bazę danych.
Orientdb {db = demo}> FREEZE DATABASE
Jeśli zakończy się pomyślnie, otrzymasz następujące dane wyjściowe.
Database 'demo' was frozen successfully
W tym rozdziale dowiesz się, jak zwolnić bazę danych ze stanu zamrożenia za pomocą wiersza poleceń OrientDB.
Poniższa instrukcja przedstawia podstawową składnię polecenia Release database.
RELEASE DATABASE
Note - Możesz użyć tego polecenia tylko po połączeniu się z konkretną bazą danych, która jest w stanie zamrożenia.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy w poprzednim rozdziale. Udostępnimy bazę danych, która została zamrożona w poprzednim rozdziale.
Aby zwolnić bazę danych, możesz użyć następującego polecenia.
Orientdb {db = demo}> RELEASE DATABASE
Jeśli zakończy się pomyślnie, otrzymasz następujące dane wyjściowe.
Database 'demo' was release successfully
Z tego rozdziału dowiesz się, jak wyświetlić konfigurację konkretnej bazy danych za pomocą wiersza poleceń OrientDB. To polecenie ma zastosowanie zarówno do lokalnych, jak i zdalnych baz danych.
Informacje konfiguracyjne zawierają domyślną pamięć podręczną włączoną lub nie, rozmiar tej pamięci podręcznej, wartość współczynnika obciążenia, maksymalną pamięć dla mapy, rozmiar strony węzła, minimalny i maksymalny rozmiar puli itp.
Poniższa instrukcja przedstawia podstawową składnię polecenia config database.
CONFIG
Note - Możesz użyć tego polecenia tylko po połączeniu się z określoną bazą danych.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy w poprzednim rozdziale.
Możesz użyć następującego polecenia, aby wyświetlić konfigurację demonstracyjnej bazy danych.
Orientdb {db = demo}> CONFIG
Jeśli zakończy się pomyślnie, otrzymasz następujące dane wyjściowe.
LOCAL SERVER CONFIGURATION:
+---------------------------------------+-------------------------+
| NAME | VALUE |
+---------------------------------------+-------------------------+
| environment.dumpCfgAtStartup | false |
| environment.concurrent | true |
| environment.allowJVMShutdown | true |
| script.pool.maxSize | 20 |
| memory.useUnsafe | true |
| memory.directMemory.safeMode | true |
| memory.directMemory.trackMode | false |
|……………………………….. | |
| storage.lowestFreeListBound | 16 |
| network.binary.debug | false |
| network.http.maxLength | 1000000 |
| network.http.charset | utf-8 |
| network.http.jsonResponseError | true |
| network.http.json | false |
| tx.log.fileType | classic |
| tx.log.synch | false |
| tx.autoRetry | 1 |
| client.channel.minPool | 1 |
| storage.keepOpen | true |
| cache.local.enabled | true |
+---------------------------------------+-------------------------+
orientdb {db = demo}>
Na powyższej liście parametrów konfiguracyjnych, jeśli chcesz zmienić jakąkolwiek wartość parametru, możesz to łatwo zrobić z wiersza poleceń za pomocą polecenia config set i get.
Config Set
Możesz zaktualizować wartość zmiennej konfiguracyjnej przy użyciu CONFIG SET Komenda.
Poniższa instrukcja przedstawia podstawową składnię polecenia config set.
CONFIG SET <config-variable> <config-value>
Note - Możesz użyć tego polecenia tylko po połączeniu się z określoną bazą danych.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy w poprzednim rozdziale. Zmodyfikujemy wartość zmiennej „tx.autoRetry” na 5.
Możesz użyć następującego polecenia, aby ustawić konfigurację demonstracyjnej bazy danych.
orientdb {db = demo}> CONFIG SET tx.autoRetry 5
Jeśli zakończy się pomyślnie, otrzymasz następujące dane wyjściowe.
Local configuration value changed correctly
Config Get
Wartość zmiennej konfiguracji można wyświetlić przy użyciu rozszerzenia CONFIG GET Komenda.
Poniższa instrukcja przedstawia podstawową składnię polecenia config get.
CONFIG GET <config-variable>
Note - Możesz użyć tego polecenia tylko po połączeniu się z określoną bazą danych.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy w poprzednim rozdziale. Spróbujemy pobrać wartość zmiennej „tx.autoRetry”.
Możesz użyć następującego polecenia, aby wyświetlić konfigurację demonstracyjnej bazy danych.
orientdb {db = demo}> CONFIG GET tx.autoRetry
Jeśli zakończy się pomyślnie, otrzymasz następujące dane wyjściowe.
Local configuration: tx.autoRetry = 5
Podobnie jak RDBMS, OrientDB zapewnia również funkcje takie jak eksport i import bazy danych. OrientDB używa formatu JSON do eksportowania danych. Domyślnie polecenie eksportu używa algorytmu GZIP do kompresji plików.
Podczas eksportowania bazy danych nie blokuje bazy danych, co oznacza, że można wykonywać na niej współbieżne operacje odczytu i zapisu. Oznacza to również, że można utworzyć dokładną kopię tych danych dzięki współbieżnym operacjom odczytu i zapisu.
Z tego rozdziału dowiesz się, jak eksportować bazę danych z wiersza poleceń OrientDB.
Poniższa instrukcja przedstawia podstawową składnię polecenia Export database.
EXPORT DATABASE <output file>
Note - Możesz użyć tego polecenia tylko po połączeniu się z określoną bazą danych.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy w poprzednim rozdziale. Możesz użyć następującego polecenia, aby wyeksportować bazę danych do pliku o nazwie „export-demo”.
orientdb {db = demo}> EXPORT DATABASE ./export-demo.export
Jeśli zakończy się pomyślnie, utworzy plik o nazwie „export-demo.zip” lub „exportdemo.gz” w oparciu o system operacyjny, a otrzymasz następujące dane wyjściowe.
Exporting current database to: DATABASE /home/linuxtp/Desktop/demo.export in
GZipped JSON format ...
Started export of database 'demo' to /home/linuxtp/Desktop/demo.export.gz...
Exporting database info...OK
Exporting clusters...OK (12 clusters)
Exporting schema...OK (11 classes)
Exporting records...
- Cluster 'internal' (id = 0)...OK (records = 3/3)
- Cluster 'index' (id = 1)...OK (records = 0/0)
- Cluster 'manindex' (id = 2)...OK (records = 0/0)
- Cluster 'default' (id = 3)...OK (records = 0/0)
- Cluster 'orole' (id = 4)...OK (records = 3/3)
- Cluster 'ouser' (id = 5)...OK (records = 3/3)
- Cluster 'ofunction' (id = 6)...OK (records = 0/0)
- Cluster 'oschedule' (id = 7)...OK (records = 0/0)
- Cluster 'orids' (id = 8)...OK (records = 0/0)
- Cluster 'v' (id = 9)...OK (records = 0/0)
- Cluster 'e' (id = 10)...OK (records = 0/0)
- Cluster '_studio' (id = 11)...OK (records = 1/1)
Done. Exported 10 of total 10 records
Exporting index info...
- Index dictionary...OK
- Index OUser.name...OK
- Index ORole.name...OK
OK (3 indexes)
Exporting manual indexes content...
- Exporting index dictionary ...OK (entries = 0)
OK (1 manual indexes)
Database export completed in 377ms
Zawsze, gdy chcesz zaimportować bazę danych, musisz użyć wyeksportowanego pliku w formacie JSON, który jest generowany przez polecenie eksportu.
Z tego rozdziału dowiesz się, jak importować bazę danych z wiersza poleceń OrientDB.
Poniższa instrukcja przedstawia podstawową składnię polecenia Import bazy danych.
IMPORT DATABASE <input file>
Note - Możesz użyć tego polecenia tylko po połączeniu się z określoną bazą danych.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy w poprzednim rozdziale. Możesz użyć następującego polecenia, aby zaimportować bazę danych do pliku o nazwie „export-demo.gz”.
orientdb {db = demo}> IMPORT DATABASE ./export-demo.export.gz
Jeśli zakończy się pomyślnie, wraz z pomyślnym powiadomieniem otrzymasz następujące dane wyjściowe.
Database import completed in 11612ms
Podobnie jak RDBMS, OrientDB zapewnia również koncepcje transakcji, takie jak Commit i Rollback. Commit odnosi się do zamknięcia transakcji poprzez zapisanie wszystkich zmian w bazie danych. Rollback odnosi się do odzyskiwania stanu bazy danych do momentu otwarcia transakcji.
Poniższa instrukcja przedstawia podstawową składnię polecenia Commit database.
COMMIT
Note - Komendy można użyć dopiero po połączeniu się z daną bazą danych i po rozpoczęciu transakcji.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy w poprzednim rozdziale. Zobaczymy operację zatwierdzania transakcji i zapiszemy rekord przy użyciu transakcji.
Najpierw rozpocznij transakcję w następujący sposób BEGIN Komenda.
orientdb {db = demo}> BEGIN
Następnie wstaw rekord do tabeli pracowników z wartościami id = 12 i name = satish.P, używając następującego polecenia.
orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')
Możesz użyć następującego polecenia, aby zatwierdzić transakcję.
orientdb> commit
Jeśli ta transakcja zostanie pomyślnie zatwierdzona, otrzymasz następujące dane wyjściowe.
Transaction 2 has been committed in 4ms
W tym rozdziale dowiesz się, jak cofnąć niezatwierdzoną transakcję za pomocą interfejsu wiersza poleceń OrientDB.
Poniższa instrukcja przedstawia podstawową składnię polecenia Rollback database.
ROLLBACK
Note - Komendy można użyć dopiero po połączeniu się z daną bazą danych i po rozpoczęciu transakcji.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy w poprzednim rozdziale. Zobaczymy operację wycofywania transakcji i zapiszemy rekord przy użyciu transakcji.
Najpierw rozpocznij transakcję w następujący sposób BEGIN Komenda.
orientdb {db = demo}> BEGIN
Następnie wstaw rekord do tabeli pracowników z wartościami id = 12 i name = satish.P, używając następującego polecenia.
orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')
Możesz użyć następującego polecenia, aby pobrać rekordy z tabeli Employee.
orientdb> SELECT FROM employee WHERE name LIKE '%.P'
Jeśli to polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
---+-------+--------------------
# | ID | name
---+-------+--------------------
0 | 12 | satish.P
---+-------+--------------------
1 item(s) found. Query executed in 0.076 sec(s).
Możesz teraz użyć następującego polecenia, aby wycofać tę transakcję.
orientdb> ROLLBACK
Sprawdź ponownie zapytanie wybierające, aby pobrać ten sam rekord z tabeli pracowników.
orientdb> SELECT FROM employee WHERE name LIKE '%.P'
Jeśli wycofanie zakończy się pomyślnie, w wyniku otrzymasz 0 rekordów.
0 item(s) found. Query executed in 0.037 sec(s).
Zgodnie z terminologią techniczną Optimizationoznacza „Osiągnij możliwie najlepszą wydajność w jak najkrótszym czasie”. W odniesieniu do bazy danych optymalizacja polega na maksymalizacji szybkości i wydajności pobierania danych.
OrientDB obsługuje lekkie krawędzie, co oznacza bezpośredni związek między jednostkami danych. Mówiąc najprościej, jest to relacja pole-pole. OrientDB zapewnia różne sposoby optymalizacji bazy danych. Obsługuje konwersję zwykłych krawędzi do lekkich krawędzi.
Poniższa instrukcja przedstawia podstawową składnię polecenia Optymalizuj bazę danych.
OPTMIZE DATABASE [-lwedges] [-noverbose]
Gdzie lwedges przekształca zwykłe krawędzie w lekkie krawędzie i noverbose wyłącza wyjście.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy w poprzednim rozdziale. Możesz użyć następującego polecenia optymalizacji bazy danych.
OPTIMIZE DATABASE -lwedges
Jeśli zakończy się pomyślnie, otrzymasz kilka pomyślnych powiadomień wraz z komunikatem o zakończeniu.
Database Optimization completed in 35ms
Podobnie jak RDBMS, OrientDB zapewnia funkcję usuwania bazy danych. Drop database odnosi się do całkowitego usunięcia bazy danych.
Poniższa instrukcja przedstawia podstawową składnię polecenia Drop database.
DROP DATABASE [<database-name> <server-username> <server-user-password>]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<database-name> - Nazwa bazy danych, którą chcesz usunąć.
<server-username> - nazwa użytkownika bazy danych, który ma uprawnienia do usuwania bazy danych.
<server-user-password> - Hasło konkretnego użytkownika.
Przykład
Istnieją dwa sposoby usunięcia bazy danych, jeden to usunięcie aktualnie otwartej bazy danych, a drugi to usunięcie konkretnej bazy danych poprzez podanie określonej nazwy.
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy we wcześniejszym rozdziale. Do usunięcia bazy danych można użyć następującego poleceniademo.
orientdb {db = demo}> DROP DATABASE
Jeśli to polecenie zostanie pomyślnie wykonane, otrzymasz następujące dane wyjściowe.
Database 'demo' deleted successfully
OR
Możesz użyć innego polecenia, aby usunąć bazę danych w następujący sposób.
orientdb> DROP DATABASE PLOCAL:/opt/orientdb/databases/demo admin admin
Jeśli to polecenie zostanie pomyślnie wykonane, otrzymasz następujące dane wyjściowe.
Database 'demo' deleted successfully
OrientDB to baza danych NoSQL, która może przechowywać dokumenty i dane graficzne. Baza danych NoSQL nie zawiera żadnej tabeli, więc jak wstawić dane jako rekord. Tutaj możesz zobaczyć dane tabeli w postaci klasy, właściwości, wierzchołka i krawędzi, co oznacza, że klasy są jak tabele, a właściwości są jak pliki w tabelach.
Wszystkie te jednostki możemy zdefiniować za pomocą schemaw OrientDB. Dane właściwości można wstawiać do klasy. Polecenie Insert tworzy nowy rekord w schemacie bazy danych. Rekordy mogą być pozbawione schematu lub podlegać pewnym określonym regułom.
Poniższa instrukcja przedstawia podstawową składnię polecenia Wstaw rekord.
INSERT INTO [class:]<class>|cluster:<cluster>|index:<index>
[(<field>[,]*) VALUES (<expression>[,]*)[,]*]|
[SET <field> = <expression>|<sub-command>[,]*]|
[CONTENT {<JSON>}]
[RETURN <expression>]
[FROM <query>]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
SET - Definiuje każde pole wraz z wartością.
CONTENT- Definiuje dane JSON do ustawiania wartości pól. To jest opcjonalne.
RETURN- Definiuje wyrażenie do zwrócenia zamiast liczby wstawionych rekordów. Najczęstsze przypadki użycia to -
@rid - Zwraca identyfikator nowego rekordu.
@this - Zwraca cały nowy rekord.
FROM - Gdzie chcesz wstawić rekord lub zestaw wyników.
Przykład
Rozważmy tabelę klientów z następującymi polami i typami.
Sr.No. | Nazwa pola | Rodzaj |
---|---|---|
1 | ID | Liczba całkowita |
2 | Nazwa | Strunowy |
3 | Wiek | Liczba całkowita |
Możesz utworzyć schemat (tabelę), wykonując następujące polecenia.
CREATE DATABASE PLOCAL:/opt/orientdb/databases/sales
CREATE CLASS Customer
CREATE PROPERTY Customer.id integer
CREATE PROPERTY Customer.name String
CREATE PROPERTY Customer.age integer
Po wykonaniu wszystkich poleceń otrzymasz nazwę tabeli Customer z polami id, name i age. Możesz sprawdzić tabelę, wykonując zapytanie wybierające do tabeli Customer.
OrientDB udostępnia różne sposoby wstawiania rekordu. Rozważ następującą tabelę Customer zawierającą przykładowe rekordy.
Sr.No. | Nazwa | Wiek |
---|---|---|
1 | Satish | 25 |
2 | Kryszna | 26 |
3 | Kiran | 29 |
4 | Javeed | 21 |
5 | Radża | 29 |
Następujące polecenie służy do wstawienia pierwszego rekordu do tabeli Customer.
INSERT INTO Customer (id, name, age) VALUES (01,'satish', 25)
Jeśli powyższe polecenie zostanie pomyślnie wykonane, otrzymasz następujące dane wyjściowe.
Inserted record 'Customer#11:0{id:1,name:satish,age:25} v1' in 0.069000 sec(s).
Następujące polecenie służy do wstawienia drugiego rekordu do tabeli Customer.
INSERT INTO Customer SET id = 02, name = 'krishna', age = 26
Jeśli powyższe polecenie zostanie pomyślnie wykonane, otrzymasz następujące dane wyjściowe.
Inserted record 'Customer#11:1{id:2,age:26,name:krishna} v1' in 0.005000 sec(s).
Następujące polecenie służy do wstawienia trzeciego rekordu do tabeli Customer.
INSERT INTO Customer CONTENT {"id": "03", "name": "kiran", "age": "29"}
Jeśli powyższe polecenie zostanie pomyślnie wykonane, otrzymasz następujące dane wyjściowe.
Inserted record 'Customer#11:2{id:3,name:kiran,age:29} v1' in 0.004000 sec(s).
Następujące polecenie służy do wstawienia kolejnych dwóch rekordów do tabeli Customer.
INSERT INTO Customer (id, name, age) VALUES (04,'javeed', 21), (05,'raja', 29)
Jeśli powyższe polecenie zostanie pomyślnie wykonane, otrzymasz następujące dane wyjściowe.
Inserted record '[Customer#11:3{id:4,name:javeed,age:21} v1,
Customer#11:4{id:5,name:raja,age:29} v1]' in 0.007000 sec(s).
Możesz sprawdzić, czy wszystkie te rekordy zostały wstawione, czy nie, wykonując następujące polecenie.
SELECT FROM Customer
Jeśli powyższe polecenie zostanie pomyślnie wykonane, otrzymasz następujące dane wyjściowe.
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:0|Customer|1 |satish |25
1 |#11:1|Customer|2 |krishna|26
2 |#11:2|Customer|3 |kiran |29
3 |#11:3|Customer|4 |javeed |21
4 |#11:4|Customer|5 |raja |29
----+-----+--------+----+-------+----
Podobnie jak RDBMS, OrientDB obsługuje różne typy zapytań SQL w celu pobrania rekordów z bazy danych. Podczas pobierania rekordów mamy różne warianty lub opcje zapytań wraz z instrukcją select.
Poniższa instrukcja przedstawia podstawową składnię polecenia SELECT.
SELECT [ <Projections> ] [ FROM <Target> [ LET <Assignment>* ] ]
[ WHERE <Condition>* ]
[ GROUP BY <Field>* ]
[ ORDER BY <Fields>* [ ASC|DESC ] * ]
[ UNWIND <Field>* ]
[ SKIP <SkipRecords> ]
[ LIMIT <MaxRecords> ]
[ FETCHPLAN <FetchPlan> ]
[ TIMEOUT <Timeout> [ <STRATEGY> ] ]
[ LOCK default|record ]
[ PARALLEL ]
[ NOCACHE ]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<Projections> - Wskazuje dane, które chcesz wyodrębnić z zapytania jako zestaw rekordów wyników.
FROM- wskazuje obiekt do zapytania. Może to być klasa, klaster, pojedynczy identyfikator rekordu, zestaw identyfikatorów rekordów. Możesz określić wszystkie te obiekty jako docelowe.
WHERE - Określa warunek filtrowania zestawu wyników.
LET - Wskazuje zmienną kontekstową, która jest używana w prognozach, warunkach lub zapytaniach cząstkowych.
GROUP BY - Wskazuje pole do grupowania rekordów.
ORDER BY - Wskazuje pole do uporządkowania rekordu w kolejności.
UNWIND - Wyznacza pole, w którym należy rozwinąć kolekcję rekordów.
SKIP - Określa liczbę rekordów, które chcesz pominąć od początku zestawu wyników.
LIMIT - Wskazuje maksymalną liczbę rekordów w zestawie wyników.
FETCHPLAN - Określa strategię definiującą sposób pobierania wyników.
TIMEOUT - Określa maksymalny czas w milisekundach dla zapytania.
LOCK- Określa strategię blokowania. DEFAULT i RECORD to dostępne strategie blokowania.
PARALLEL - Wykonuje zapytanie względem współbieżnych wątków „x”.
NOCACHE - Określa, czy chcesz używać pamięci podręcznej, czy nie.
Przykład
Rozważmy następującą tabelę klientów utworzoną w poprzednim rozdziale.
Sr.No. | Nazwa | Wiek |
---|---|---|
1 | Satish | 25 |
2 | Kryszna | 26 |
3 | Kiran | 29 |
4 | Javeed | 21 |
5 | Radża | 29 |
Wypróbuj różne zapytania wybierające, aby pobrać rekordy danych z tabeli Klient.
Method 1 - Możesz użyć następującego zapytania, aby wybrać wszystkie rekordy z tabeli Customer.
orientdb {db = demo}> SELECT FROM Customer
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:0|Customer|1 |satish |25
1 |#11:1|Customer|2 |krishna|26
2 |#11:2|Customer|3 |kiran |29
3 |#11:3|Customer|4 |javeed |21
4 |#11:4|Customer|5 |raja |29
----+-----+--------+----+-------+----
Method 2 - Wybierz wszystkie rekordy, których nazwa zaczyna się na literę „k”.
orientdb {db = demo}> SELECT FROM Customer WHERE name LIKE 'k%'
LUB możesz użyć następującego zapytania dla powyższego przykładu.
orientdb {db = demo}> SELECT FROM Customer WHERE name.left(1) = 'k'
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:1|Customer|2 |krishna|26
1 |#11:2|Customer|3 |kiran |29
----+-----+--------+----+-------+----
Method 3 - Wybierz identyfikator, nazwij rekordy z tabeli Klientów z nazwami wielkimi literami.
orientdb {db = demo}> SELECT id, name.toUpperCase() FROM Customer
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+--------+----+-------
# |@CLASS |id |name
----+--------+----+-------
0 |null |1 |SATISH
1 |null |2 |KRISHNA
2 |null |3 |KIRAN
3 |null |4 |JAVEED
4 |null |5 |RAJA
----+--------+----+-------
Method 4 - Wybierz wszystkie rekordy z tabeli Customer, w których wiek mieści się w zakresie od 25 do 29.
orientdb {db = demo}> SELECT FROM Customer WHERE age in [25,29]
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:0|Customer|1 |satish |25
1 |#11:2|Customer|3 |kiran |29
2 |#11:4|Customer|5 |raja |29
----+-----+--------+----+-------+----
Method 5 - Wybierz wszystkie rekordy z tabeli Customer, w której dowolne pole zawiera słowo „sh”.
orientdb {db = demo}> SELECT FROM Customer WHERE ANY() LIKE '%sh%'
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:0|Customer|1 |satish |25
1 |#11:1|Customer|2 |krishna|26
----+-----+--------+----+-------+----
Method 6 - Wybierz wszystkie rekordy z tabeli Klient, uporządkowane według wieku w porządku malejącym.
orientdb {db = demo}> SELECT FROM Customer ORDER BY age DESC
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:2|Customer|3 |kiran |29
1 |#11:4|Customer|5 |raja |29
2 |#11:1|Customer|2 |krishna|26
3 |#11:0|Customer|1 |satish |25
4 |#11:3|Customer|4 |javeed |21
----+-----+--------+----+-------+----
Load Recordsłuży do ładowania określonego rekordu ze schematu. Załaduj rekord załaduje rekord za pomocą identyfikatora rekordu. Jest reprezentowany przez@rid symbol w zestawie wyników.
Poniższa instrukcja przedstawia podstawową składnię polecenia LOAD Record.
LOAD RECORD <record-id>
Gdzie <record-id> określa identyfikator rekordu, który chcesz załadować.
Jeśli nie znasz identyfikatora rekordu określonego rekordu, możesz wykonać dowolne zapytanie dotyczące tabeli. W zestawie wyników znajdziesz identyfikator rekordu (@rid) odpowiedniego rekordu.
Przykład
Rozważmy tę samą tabelę klientów, której używaliśmy w poprzednich rozdziałach.
Sr.No. | Nazwa | Wiek |
---|---|---|
1 | Satish | 25 |
2 | Kryszna | 26 |
3 | Kiran | 29 |
4 | Javeed | 21 |
5 | Radża | 29 |
Spróbuj wykonać następujące zapytanie, aby pobrać rekord mający identyfikator rekordu @rid: #11:0.
orientdb {db = demo}> LOAD RECORD #11:0
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
+---------------------------------------------------------------------------+
| Document - @class: Customer @rid: #11:0 @version: 1 |
+---------------------------------------------------------------------------+
| Name | Value |
+---------------------------------------------------------------------------+
| id | 1 |
| name | satish |
| age | 25 |
+---------------------------------------------------------------------------+
Reload Recorddziała również podobnie do polecenia Load Record i służy także do ładowania konkretnego rekordu ze schematu. Załaduj rekord załaduje rekord za pomocą identyfikatora rekordu. Jest reprezentowany przez@ridsymbol w zestawie wyników. Główną różnicą jest to, że Przeładuj rekord ignoruje pamięć podręczną, co jest przydatne, gdy do zmiany rekordu są stosowane zewnętrzne transakcje równoległe. Zapewni najnowszą aktualizację.
Poniższa instrukcja przedstawia podstawową składnię polecenia RELOAD Record.
RELOAD RECORD <record-id>
Gdzie <record-id> definiuje identyfikator rekordu, który chcesz przeładować.
Jeśli nie znasz identyfikatora rekordu określonego rekordu, możesz wykonać dowolne zapytanie dotyczące tabeli. W zestawie wyników znajdziesz identyfikator rekordu (@rid) odpowiedniego rekordu.
Przykład
Rozważmy tę samą tabelę Customer, której używaliśmy w poprzednim rozdziale.
Sr.No. | Nazwa | Wiek |
---|---|---|
1 | Satish | 25 |
2 | Kryszna | 26 |
3 | Kiran | 29 |
4 | Javeed | 21 |
5 | Radża | 29 |
Spróbuj wykonać następujące zapytanie, aby pobrać rekord mający identyfikator rekordu @rid: #11:0.
orientdb {db = demo}> LOAD RECORD #11:0
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
+---------------------------------------------------------------------------+
| Document - @class: Customer @rid: #11:0 @version: 1 |
+---------------------------------------------------------------------------+
| Name | Value |
+---------------------------------------------------------------------------+
| id | 1 |
| name | satish |
| age | 25 |
+---------------------------------------------------------------------------+
Export Recordto polecenie używane do eksportowania załadowanego rekordu do żądanego i obsługiwanego formatu. Jeśli wykonujesz jakąkolwiek złą składnię, wyświetli listę obsługiwanych formatów. OrientDB to rodzina baz danych dokumentów, dlatego JSON jest domyślnym obsługiwanym formatem.
Poniższa instrukcja przedstawia podstawową składnię polecenia Export Record.
EXPORT RECORD <format>
Gdzie <Format> określa format, w jakim chcesz uzyskać rekord.
Note - Polecenie eksportu wyeksportuje załadowany rekord na podstawie identyfikatora rekordu.
Przykład
Rozważmy tę samą tabelę Customer, której używaliśmy w poprzednim rozdziale.
Sr.No. | Nazwa | Wiek |
---|---|---|
1 | Satish | 25 |
2 | Kryszna | 26 |
3 | Kiran | 29 |
4 | Javeed | 21 |
5 | Radża | 29 |
Spróbuj wykonać następujące zapytanie, aby pobrać rekord mający identyfikator rekordu @rid: #11:0.
orientdb {db = demo}> LOAD RECORD #11:0
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
+---------------------------------------------------------------------------+
| Document - @class: Customer @rid: #11:0 @version: 1 |
+---------------------------------------------------------------------------+
| Name | Value |
+---------------------------------------------------------------------------+
| id | 1 |
| name | satish |
| age | 25 |
+---------------------------------------------------------------------------+
Użyj następującego zapytania, aby wyeksportować załadowany rekord (# 11: 0) do formatu JSON.
orientdb {db = demo}> EXPORT RECORD json
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
{
"@type": "d",
"@rid": "#11:0",
"@version": 1,
"@class": "Customer",
"id": 1,
"name": "satish",
"age": 25
}
Update Recordpolecenie służy do modyfikacji wartości określonego rekordu. SET to podstawowe polecenie do aktualizacji określonej wartości pola.
Poniższa instrukcja przedstawia podstawową składnię polecenia Update.
UPDATE <class>|cluster:<cluster>|<recordID>
[SET|INCREMENT|ADD|REMOVE|PUT <field-name> = <field-value>[,]*] |[CONTENT| MERGE <JSON>]
[UPSERT]
[RETURN <returning> [<returning-expression>]]
[WHERE <conditions>]
[LOCK default|record]
[LIMIT <max-records>] [TIMEOUT <timeout>]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
SET - określa pole do aktualizacji.
INCREMENT - Zwiększa określoną wartość pola o podaną wartość.
ADD - Dodaje nowy element w polach kolekcji.
REMOVE - Usuwa element z pola kolekcji.
PUT - Umieszcza wpis w polu mapy.
CONTENT - Zastępuje zawartość rekordu treścią dokumentu JSON.
MERGE - Łączy zawartość rekordu z dokumentem JSON.
LOCK- Określa, jak zablokować rekordy między ładowaniem a aktualizacją. Mamy dwie opcje do określeniaDefault i Record.
UPSERT- Aktualizuje rekord, jeśli istnieje, lub wstawia nowy rekord, jeśli nie istnieje. Pomaga w wykonaniu pojedynczego zapytania zamiast wykonywania dwóch zapytań.
RETURN - określa wyrażenie do zwrócenia zamiast liczby rekordów.
LIMIT - Określa maksymalną liczbę rekordów do aktualizacji.
TIMEOUT - Określa czas, po jakim ma być uruchamiana aktualizacja, zanim upłynie jej limit czasu.
Przykład
Rozważmy tę samą tabelę Customer, której używaliśmy w poprzednim rozdziale.
Sr.No. | Nazwa | Wiek |
---|---|---|
1 | Satish | 25 |
2 | Kryszna | 26 |
3 | Kiran | 29 |
4 | Javeed | 21 |
5 | Radża | 29 |
Spróbuj wykonać poniższe zapytanie, aby zaktualizować wiek klienta „Raja”.
Orientdb {db = demo}> UPDATE Customer SET age = 28 WHERE name = 'Raja'
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Updated 1 record(s) in 0.008000 sec(s).
Aby sprawdzić rekord tabeli Customer, możesz użyć następującego zapytania.
orientdb {db = demo}> SELECT FROM Customer
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:0|Customer|1 |satish |25
1 |#11:1|Customer|2 |krishna|26
2 |#11:2|Customer|3 |kiran |29
3 |#11:3|Customer|4 |javeed |21
4 |#11:4|Customer|5 |raja |28
----+-----+--------+----+-------+----
Truncate Record Polecenie służy do usuwania wartości określonego rekordu.
Poniższa instrukcja przedstawia podstawową składnię polecenia Obetnij.
TRUNCATE RECORD <rid>*
Gdzie <rid>* wskazuje identyfikator rekordu do obcięcia. Możesz użyć wielu Ridów oddzielonych przecinkami, aby obciąć wiele rekordów. Zwraca liczbę obciętych rekordów.
Przykład
Rozważmy tę samą tabelę Customer, której używaliśmy w poprzednim rozdziale.
Sr.No. | Nazwa | Wiek |
---|---|---|
1 | Satish | 25 |
2 | Kryszna | 26 |
3 | Kiran | 29 |
4 | Javeed | 21 |
5 | Radża | 28 |
Spróbuj wykonać następujące zapytanie, aby obciąć rekord o identyfikatorze rekordu nr 11: 4.
Orientdb {db = demo}> TRUNCATE RECORD #11:4
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Truncated 1 record(s) in 0.008000 sec(s).
Aby sprawdzić rekord tabeli Customer, możesz użyć następującego zapytania.
Orientdb {db = demo}> SELECT FROM Customer
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:0|Customer|1 |satish |25
1 |#11:1|Customer|2 |krishna|26
2 |#11:2|Customer|3 |kiran |29
3 |#11:3|Customer|4 |javeed |21
----+-----+--------+----+-------+----
Delete Record polecenie służy do całkowitego usunięcia jednego lub więcej rekordów z bazy danych.
Poniższa instrukcja przedstawia podstawową składnię polecenia Usuń.
DELETE FROM <Class>|cluster:<cluster>|index:<index>
[LOCK <default|record>]
[RETURN <returning>]
[WHERE <Condition>*]
[LIMIT <MaxRecords>]
[TIMEOUT <timeout>]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
LOCK- Określa, jak zablokować rekordy między ładowaniem a aktualizacją. Mamy dwie opcje do określeniaDefault i Record.
RETURN - określa wyrażenie do zwrócenia zamiast liczby rekordów.
LIMIT - Określa maksymalną liczbę rekordów do aktualizacji.
TIMEOUT - Określa czas, po jakim ma być uruchamiana aktualizacja, zanim upłynie jej limit czasu.
Note - Nie używaj polecenia DELETE do usuwania wierzchołków lub krawędzi, ponieważ wpływa to na integralność wykresu.
Przykład
Rozważmy tabelę klientów.
Sr.No. | Nazwa | Wiek |
---|---|---|
1 | Satish | 25 |
2 | Kryszna | 26 |
3 | Kiran | 29 |
4 | Javeed | 21 |
Spróbuj wykonać następujące zapytanie, aby usunąć rekord o id = 4.
orientdb {db = demo}> DELETE FROM Customer WHERE id = 4
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Delete 1 record(s) in 0.008000 sec(s).
Aby sprawdzić rekord tabeli Customer, możesz użyć następującego zapytania.
Orientdb {db = demo}> SELECT FROM Customer
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+-----+--------+----+-------+----
# |@RID |@CLASS |id |name |age
----+-----+--------+----+-------+----
0 |#11:0|Customer|1 |satish |25
1 |#11:1|Customer|2 |krishna|26
2 |#11:2|Customer|3 |kiran |29
----+-----+--------+----+-------+----
OrientDB obsługuje funkcje wielu modeli i zapewnia różne sposoby podejścia i zrozumienia podstawowych pojęć dotyczących bazy danych. Możemy jednak łatwo uzyskać dostęp do tych modeli z perspektywy API bazy danych dokumentów. Podobnie jak RDBMS, OrientDB również używa rekordu jako elementu pamięci, ale używa typu dokumentu. Dokumenty są przechowywane w postaci par klucz / wartość. Przechowujemy pola i właściwości jako pary klucz / wartość, które należą do klasy pojęć.
Classjest typem modelu danych, a koncepcja zaczerpnięta jest z paradygmatu programowania obiektowego. W oparciu o tradycyjny model bazy dokumentów dane są przechowywane w postaci kolekcji, natomiast w modelu relacyjnej bazy danych dane są przechowywane w tabelach. OrientDB jest zgodny z interfejsem API dokumentów wraz z paradygmatem OPPS. Zgodnie z koncepcją, klasa w OrientDB ma najbliższy związek z tabelą w relacyjnych bazach danych, ale (w przeciwieństwie do tabel) klasy mogą być bez schematu, pełne lub mieszane. Klasy mogą dziedziczyć po innych klasach, tworząc drzewa klas. Każda klasa ma własny klaster lub klastry (tworzone domyślnie, jeśli nie zostały zdefiniowane).
Poniższa instrukcja przedstawia podstawową składnię polecenia Create Class.
CREATE CLASS <class>
[EXTENDS <super-class>]
[CLUSTER <cluster-id>*]
[CLUSTERS <total-cluster-number>]
[ABSTRACT]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<class> - Określa nazwę klasy, którą chcesz utworzyć.
<super-class> - Określa superklasę, którą chcesz rozszerzyć o tę klasę.
<total-cluster-number>- Określa całkowitą liczbę klastrów używanych w tej klasie. Wartość domyślna to 1.
ABSTARCT- Określa, że klasa jest abstrakcyjna. To jest opcjonalne.
Przykład
Jak już wspomniano, klasa jest pojęciem związanym z tabelą. Dlatego tutaj utworzymy konto tabeli. Jednak tworząc klasę nie możemy definiować pól, czyli właściwości opartych na paradygmacie OOPS.
Następujące polecenie służy do utworzenia klasy o nazwie Account.
orientdb> CREATE CLASS Account
Jeśli powyższe polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Class created successfully
Możesz użyć następującego polecenia, aby utworzyć klasę Car która rozciąga się na klasę Vehicle.
orientdb> CREATE CLASS Car EXTENDS Vehicle
Jeśli powyższe polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Class created successfully
Możesz użyć następującego polecenia, aby utworzyć klasę Person jako abstrakcyjną.
orientdb> CREATE CLASS Person ABSTRACT
Jeśli powyższe polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Class created successfully
Note- Bez właściwości klasa jest bezużyteczna i nie może zbudować prawdziwego obiektu. W dalszych rozdziałach możesz dowiedzieć się, jak tworzyć właściwości dla określonej klasy.
Klasa i właściwość w OrientDB są używane do budowania schematu z odpowiednimi atrybutami, takimi jak nazwa klasy, superklasa, klaster, liczba klastrów, streszczenie itp. Jeśli chcesz zmodyfikować lub zaktualizować dowolny atrybut istniejących klas w schemacie, musisz użyć Alter Class Komenda.
Poniższa instrukcja przedstawia podstawową składnię polecenia Alter Class.
ALTER CLASS <class> <attribute-name> <attribute-value>
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<class> - określa nazwę klasy.
<attribute-name> - określa atrybut, który chcesz zmienić.
<attribute-value> - określa wartość, którą chcesz ustawić dla atrybutu.
Poniższa tabela zawiera listę atrybutów obsługujących polecenie Zmień klasę.
Atrybut | Rodzaj | Opis |
---|---|---|
NAZWA | Strunowy | Zmienia nazwę klasy. |
KRÓTKIE IMIĘ | Strunowy | Definiuje krótką nazwę (czyli alias) dla klasy. Użyj NULL, aby usunąć przypisanie krótkiej nazwy. |
SUPERCLASS | Strunowy | Definiuje superklasę dla klasy. Aby dodać nową klasę, możesz użyć składni + <class>, aby ją usunąć, użyj - <class>. |
NADWYMIAROWE | Liczba dziesiętna | Określa współczynnik przewymiarowania. |
ADDCLUSTER | Strunowy | Dodaje klaster do klasy. Jeśli klaster nie istnieje, tworzy klaster fizyczny. Dodanie klastrów do klasy jest również przydatne przy przechowywaniu rekordów na serwerach rozproszonych. |
REMOVECLUSTER | Strunowy | Usuwa klaster z klasy. Nie usuwa klastra, a jedynie usuwa go z klasy. |
TRYB ŚCISŁY | - | Włącza lub wyłącza tryb ścisły. W trybie ścisłym pracujesz w trybie pełnego schematu i nie możesz dodawać nowych właściwości do rekordu, jeśli są one częścią definicji schematu klasy. |
CLUSTERSELECTION | - | Definiuje strategię wyboru przy wyborze klastra używanego dla nowych rekordów. |
ZWYCZAJ | - | Definiuje właściwości niestandardowe. Nazwy i wartości właściwości muszą być zgodne ze składnią <propertyname> = <value> bez spacji między nazwą a wartością. |
ABSTRAKCYJNY | Boolean | Konwertuje klasę na klasę abstrakcyjną lub odwrotnie. |
Przykład
Wypróbujmy kilka przykładów, które zaktualizują lub zmodyfikują atrybuty istniejącej klasy.
Poniższe zapytanie służy do zdefiniowania superklasy „Person” dla istniejącej klasy „Employee”.
orientdb> ALTER CLASS Employee SUPERCLASS Person
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Class altered successfully
Poniższe zapytanie służy do dodawania superklasy „Person” do istniejącej klasy „Employee”.
orientdb> ALTER CLASS Employee SUPERCLASS +Person
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Class altered successfully
Truncate classusunie wszystkie rekordy klastrów zdefiniowanych jako część klasy. W OrientDB każda klasa ma powiązany klaster o tej samej nazwie. Jeśli chcesz również usunąć wszystkie rekordy z hierarchii klas, musisz użyć słowa kluczowego POLYMORPHIC.
Poniższa instrukcja przedstawia podstawową składnię polecenia obcięcia klasy.
TRUNCATE CLASS <class> [ POLYMORPHIC ] [ UNSAFE ]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<class> - Określa klasę, którą chcesz obciąć.
POLYMORPHIC - Określa, czy polecenie obcina również hierarchię.
UNSAFE - Definiuje polecenie wymusza obcięcie klasy wierzchołka lub krawędzi.
Przykład
Następujące zapytanie do obcięcia klasy Profile.
orientdb> TRUNCATE CLASS Profile
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Class truncated successfully
Plik Drop Classpolecenie usuwa klasę ze schematu. Ważne jest, aby zwracać uwagę i utrzymywać spójny schemat. Na przykład unikaj usuwania klas, które są nadklasami innych. Powiązany klaster nie zostanie usunięty.
Poniższa instrukcja przedstawia podstawową składnię polecenia Drop Class.
DROP CLASS <class>
Upuść klasę z nazwą klasy.
Przykład
Spróbuj wykonać następujące zapytanie, aby porzucić pracownika klasy.
Orientdb> DROP CLASS Employee
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Class dropped successfully
Clusterto ważna koncepcja w OrientDB, która służy do przechowywania rekordów, dokumentów lub wierzchołków. Mówiąc prościej, klaster to miejsce, w którym przechowywana jest grupa rekordów. Domyślnie OrientDB utworzy jeden klaster na klasę. Wszystkie rekordy klasy są przechowywane w tym samym klastrze, który ma taką samą nazwę jak klasa. W bazie danych można utworzyć do 32767 (2 ^ 15-1) klastrów.
Klasa CREATE to polecenie używane do tworzenia klastra o określonej nazwie. Po utworzeniu klastra można go użyć do zapisania rekordów, określając nazwę podczas tworzenia dowolnego modelu danych. Jeśli chcesz dodać nowy klaster do klasy, użyj polecenia Zmień klasę i polecenia ADDCLUSTER.
Poniższa instrukcja przedstawia podstawową składnię polecenia Create Cluster.
CREATE CLUSTER <cluster> [ID <cluster-id>]
Gdzie <cluster> definiuje nazwę klastra, który chcesz utworzyć, i <cluster-id> definiuje numeryczny identyfikator, którego chcesz użyć dla klastra.
Poniższa tabela zawiera listę strategii wyboru klastrów.
Sr.No. | Strategia i opis |
---|---|
1 | Default Wybiera klaster przy użyciu domyślnej właściwości klasy ClusterId. |
2 | Round-robin Wybiera następny klaster w kolejności cyklicznej. Po zakończeniu jest ponownie uruchamiany. |
3 | Balanced Wybiera najmniejszy klaster. Umożliwia klasie zrównoważenie rozmiaru wszystkich bazowych klastrów. Dodając nowy klaster do istniejącej klasy, najpierw wypełnia nowy klaster. |
Przykład
Weźmy przykład, aby utworzyć klaster o nazwie sprzedaż.
orientdb> CREATE CLUSTER sales
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Cluster created correctly with id #12
Alter Clusterpolecenie służy do aktualizacji atrybutów w istniejącym klastrze. W tym rozdziale dowiesz się, jak dodawać lub modyfikować atrybuty klastra.
Poniższa instrukcja przedstawia podstawową składnię polecenia Alter Cluster.
ALTER CLUSTER <cluster> <attribute-name> <attribute-value>
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<cluster> - określa nazwę klastra.
<attribute-name> - określa atrybut, który chcesz zmienić.
<attribute-value> - określa wartość, jaką chcesz ustawić dla tego atrybutu.
Poniższy format tabelaryczny zawiera listę obsługiwanych atrybutów, których można używać wraz z poleceniem Zmień klaster.
Nazwa | Rodzaj | Opis |
---|---|---|
NAZWA | Strunowy | Zmienia nazwę klastra. |
STATUS | Strunowy | Zmienia stan klastra. Dozwolone wartości to ONLINE i OFFLINE. Domyślnie klastry są w trybie online. |
KOMPRESJA | Strunowy | Definiuje używany typ kompresji. Dozwolone wartości to NIC, SNAPPY, GZIP i wszelkie inne typy kompresji zarejestrowane w klasie OCompressionFactory. |
USE_WAL | Boolean | Określa, czy używa dziennika, gdy OrientDB działa w klastrze |
RECORD_GROW_FACTO R | Liczba całkowita | Definiuje współczynnik wzrostu, aby zaoszczędzić więcej miejsca podczas tworzenia rekordów. Może się to okazać przydatne podczas aktualizowania rekordu o dodatkowe informacje. |
RECORD_OVERFLOW_GR OW_FACTOR | Liczba całkowita | Definiuje współczynnik wzrostu przy aktualizacjach. Gdy osiągnie limit rozmiaru, używa tego ustawienia, aby uzyskać więcej miejsca (współczynnik> 1). |
KONFLIKTSTRATEGIA | Strunowy | Definiuje strategię, której używa do obsługi konfliktów w przypadku, gdy OrientDB MVCC znajdzie aktualizację lub operację usuwania, którą wykonuje na starym rekordzie. |
Poniższa tabela zawiera listę strategii dotyczących konfliktów.
Sr.No. | Strategia i opis |
---|---|
1 | Version Zgłasza wyjątek, gdy wersje są różne. To jest ustawienie domyślne. |
2 | Content W przypadku, gdy wersje są różne, sprawdza zawartość, w przeciwnym razie używa najwyższej wersji, aby uniknąć wyrzucenia wyjątku. |
3 | Automerge Łączy zmiany. |
Przykład
Wypróbuj poniższe przykładowe zapytania, aby poznać polecenie Zmień klaster.
Wykonaj następujące polecenie, aby zmienić nazwę klastra z Employee na Employee2.
orientdb {db = demo}> ALTER CLUSTER Employee NAME Employee2
Jeśli powyższe polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Cluster updated successfully
Wykonaj następujące polecenie, aby zmienić nazwę klastra z Employee2 na Employee przy użyciu identyfikatora klastra.
orientdb {db = demo}> ALTER CLUSTER 12 NAME Employee
Jeśli powyższe polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Cluster updated successfully
Wykonaj następujące polecenie, aby zmienić strategię konfliktu klastra na automerge.
orientdb {db = demo}> ALTER CLUSTER V CONFICTSTRATEGY automerge
Jeśli powyższe polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Cluster updated successfully
Plik Truncate Cluster polecenie usuwa wszystkie rekordy klastra.
Poniższa instrukcja przedstawia podstawową składnię polecenia Obetnij klaster.
TRUNCATE CLUSTER <cluster-name>
Gdzie <cluster-name> to nazwa klastra.
Przykład
Wypróbuj następujące zapytanie, aby obciąć klaster o nazwie sales.
Orientdb {db = demo}> TRUNCATE CLUSTER Profile
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Cluster truncated successfully.
Plik Drop Clusterpolecenie usuwa klaster i całą związaną z nim zawartość. Ta operacja jest trwała i cofnięta.
Poniższa instrukcja przedstawia podstawową składnię polecenia Drop Cluster.
DROP CLUSTER <cluster-name>|<cluster-id>
Gdzie <cluster-name> określa nazwę klastra, który chcesz usunąć, i <cluster-id> określa identyfikator klastra, który chcesz usunąć.
Przykład
Wypróbuj następujące polecenie, aby usunąć klaster sprzedaży.
orientdb> DROP CLUSTER Sales
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Cluster dropped successfully
Propertyw OrientDB działa jak pole klasy i kolumny w tabeli bazy danych. Utwórz właściwość to polecenie używane do tworzenia właściwości dla określonej klasy. Nazwa klasy użyta w poleceniu musi istnieć.
Poniższa instrukcja przedstawia podstawową składnię polecenia Create Property.
CREATE PROPERTY <class-name>.<property-name> <property-type> [<linked-type>][ <linked-class>]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<class-name> - Określa klasę, w której chcesz utworzyć właściwość.
<property-name> - definiuje logiczną nazwę właściwości.
<property-type> - Określa rodzaj właściwości, które chcesz utworzyć.
<linked-type> - Definiuje typ kontenera używany w typie właściwości kontenera.
<linked-class> - Definiuje klasę kontenera używaną w typie właściwości kontenera.
W poniższej tabeli przedstawiono typ danych dla właściwości, dzięki czemu OrientDB zna typ danych do przechowywania.
BOOLEAN | LICZBA CAŁKOWITA | KRÓTKI | DŁUGO |
PŁYWAK | DATA | STRUNOWY | WBUDOWANY |
POŁĄCZYĆ | BAJT | DWÓJKOWY | PODWÓJNIE |
Oprócz tego istnieje kilka innych typów właściwości, które działają jako kontenery.
EMBEDDEDLIST | EMBEDDEDSET | EMBEDDEDMAP |
LINKLIST | LINKSET | LINKMAP |
Przykład
Wypróbuj poniższy przykład, aby utworzyć nazwę właściwości w klasie Employee typu String.
orientdb> CREATE PROPERTY Employee.name STRING
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Property created successfully with id = 1
Alter Propertyjest poleceniem używanym do modyfikowania lub aktualizowania właściwości określonej klasy. Zmiana właściwości oznacza modyfikację pól tabeli. Z tego rozdziału dowiesz się, jak zaktualizować właściwość.
Poniższa instrukcja przedstawia podstawową składnię polecenia Alter Property.
ALTER PROPERTY <class>.<property> <attribute-name> <attribute-value>
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<class> - Określa klasę, do której należy właściwość.
<property> - określa właściwość, którą chcesz zaktualizować.
<attribute-name> - określa atrybut właściwości, którą chcesz zaktualizować.
<attribute-value> - określa wartość, którą chcesz ustawić dla atrybutu.
W poniższej tabeli zdefiniowano listę atrybutów do zmiany właściwości.
Atrybut | Rodzaj | Opis |
---|---|---|
LINKEDCLASS | Strunowy | Definiuje nazwę połączonej klasy. Użyj NULL, aby usunąć istniejącą wartość. |
LINKEDTYPE | Strunowy | Określa typ łącza. Użyj NULL, aby usunąć istniejącą wartość. |
MIN | Liczba całkowita | Definiuje minimalną wartość jako ograniczenie. Użyj wartości NULL, aby usunąć istniejące ograniczenie. |
OBOWIĄZKOWY | Boolean | Określa, czy właściwość wymaga wartości. |
MAX | Liczba całkowita | Definiuje maksymalną wartość jako ograniczenie. Użyj wartości NULL, aby usunąć istniejące ograniczenie. |
NAZWA | Strunowy | Określa nazwę właściwości. |
NIE JEST ZEREM | Boolean | Określa, czy właściwość może mieć wartość NULL. |
REGEX | Strunowy | Definiuje wyrażenie regularne jako ograniczenie. Użyj wartości NULL, aby usunąć istniejące ograniczenie. |
RODZAJ | Strunowy | Definiuje typ właściwości. |
ZESTAWIĆ | Strunowy | Zestawy są sortowane według jednej ze zdefiniowanych strategii porównania. Domyślnie rozróżniana jest wielkość liter (cs). Możesz także ustawić bez rozróżniania wielkości liter (ci). |
TYLKO CZYTAĆ | Boolean | Określa, czy wartość właściwości jest niezmienna. To znaczy, jeśli można to zmienić po pierwszym przypisaniu. Używaj z DEFAULT, aby mieć niezmienne wartości podczas tworzenia. |
ZWYCZAJ | Strunowy | Definiuje właściwości niestandardowe. Składnia właściwości niestandardowych jest następująca: <nazwa-niestandardowa> = <wartość- niestandardowa>, na przykład stereotyp = ikona. |
DOMYŚLNA | Określa domyślną wartość lub funkcję. |
Note - jeśli zmieniasz NAZWĘ lub TYP, aktualizacja tego polecenia zajmie trochę czasu, w zależności od ilości danych.
Przykład
Wypróbuj kilka zapytań, które podano poniżej, aby zrozumieć właściwość Alter.
Wykonaj następujące zapytanie, aby zmienić nazwę właściwości z „wiek” na „urodzony” w klasie Klient.
orinetdb {db = demo}> ALTER PROPERTY Customer.age NAME born
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Property altered successfully
Wykonaj następujące zapytanie, aby ustawić „name” jako obowiązkową właściwość klasy „Customer”.
orientdb {db = demo}> ALTER PROPERTY Customer.name MANDATORY TRUE
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Property altered successfully
Plik Drop propertypolecenie usuwa właściwość ze schematu. Nie usuwa wartości właściwości z rekordu, po prostu zmienia schemat.
Poniższa instrukcja przedstawia podstawową składnię polecenia Drop Property.
DROP PROPERTY <class>.<property> [FORCE]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<class> - definiuje klasę, w której istnieje właściwość.
<property> - określa właściwość, którą chcesz usunąć.
[Force] - W przypadku, gdy we właściwości zdefiniowano jeden lub więcej indeksów.
Przykład
Wypróbuj następujące polecenie, aby usunąć właściwość „age” z klasy „Customer”.
orientdb> DROP PROPERTY Customer.age
Jeśli powyższe polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Property dropped successfully
Baza danych OrientDB to nie tylko baza danych dokumentów, ale także baza danych Graph. Nowe koncepcje, takie jak Vertex i Edge, służą do przechowywania danych w postaci wykresu. Stosuje polimorfizm na wierzchołkach. Klasą bazową dla Vertex jest V.
W tym rozdziale dowiesz się, jak utworzyć wierzchołek do przechowywania danych wykresu.
Poniższa instrukcja przedstawia podstawową składnię polecenia Create Vertex.
CREATE VERTEX [<class>] [CLUSTER <cluster>] [SET <field> = <expression>[,]*]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<class> - definiuje klasę, do której należy wierzchołek.
<cluster> - Definiuje klaster, w którym przechowuje wierzchołek.
<field> - Określa pole, które chcesz ustawić.
<expression> - Określa ekspres do ustawienia dla pola.
Przykład
Wypróbuj poniższy przykład, aby zrozumieć, jak utworzyć wierzchołek.
Wykonaj następujące zapytanie, aby utworzyć wierzchołek bez „nazwy” w klasie bazowej V.
orientdb> CREATE VERTEX
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Created vertex 'V#9:0 v1' in 0.118000 sec(s)
Wykonaj następujące zapytanie, aby utworzyć nową klasę wierzchołków o nazwie v1, a następnie utwórz wierzchołek w tej klasie.
orientdb> CREATE CLASS V1 EXTENDS V
orientdb> CREATE VERTEX V1
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Created vertex 'V1#14:0 v1' in 0.004000 sec(s)
Wykonaj następujące zapytanie, aby utworzyć nowy wierzchołek klasy o nazwie v1, definiując jego właściwości, takie jak brand = 'Maruti' i name = 'Swift'.
orientdb> CREATE VERTEX V1 SET brand = 'maruti', name = 'swift'
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Created vertex 'V1#14:1{brand:maruti,name:swift} v1' in 0.004000 sec(s)
Polecenie Przesuń wierzchołek w OrientDB służy do przeniesienia jednego lub więcej wierzchołków z bieżącej lokalizacji do innej klasy lub klastra. Jeśli stosujesz polecenie ruchu na określonym wierzchołku, zaktualizuje ono wszystkie krawędzie, które są połączone z tym wierzchołkiem. Jeśli określasz klaster do przeniesienia wierzchołka, przenosi on wierzchołki do właściciela serwera docelowego klastra.
Poniższa instrukcja przedstawia podstawową składnię polecenia Move Vertex.
MOVE VERTEX <source> TO <destination>
[SET [<field>=<value>]* [,]]
[MERGE <JSON>]
[BATCH <batch-size>]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<source>- Określa wierzchołek, który chcesz przenieść. Przyjmuje identyfikator rekordu określonego wierzchołka lub tablicę identyfikatorów rekordów dla wierzchołków.
<destination>- Określa, gdzie chcesz przenieść wierzchołek. Obsługuje klasę lub klaster jako miejsce docelowe.
SET - Ustawia wartości na pola.
MERGE - Ustawia wartości na pola za pomocą JSON.
BATCH - Określa wielkość partii.
Note- To polecenie aktualizuje wszystkie podłączone krawędzie, ale nie łącza. Podczas korzystania z Graph API zaleca się używanie krawędzi połączonej z wierzchołkami.
Przykład
Wypróbuj poniższe przykłady, aby dowiedzieć się, jak przesuwać wierzchołki.
Wykonaj następujące zapytanie, aby przenieść pojedynczy wierzchołek o identyfikatorze rekordu 11: 2 z jego aktualnej pozycji do klasy Pracownik.
orientdb> MOVE VERTEX #11:2 TO CLASS:Employee
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe -
Move vertex command executed with result '[{old:#11:2, new:#13:0}]' in 0.022000 sec(s)
Wykonaj następujące zapytanie, aby przenieść zbiór wierzchołków z klasy „Klient” do klasy „Pracownik”.
orientdb> MOVE VERTEX (SELECT FROM Customer) TO CLASS:Employee
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Move vertex command executed with result '[{old:#11:0,
new:#13:1},{old:#11:1, new:#13:2},{old:#11:2, new:#13:3}]' in 0.011000 sec(s)
Delete VertexPolecenie służy do usuwania wierzchołków z bazy danych. Podczas usuwania sprawdza i zachowuje spójność z krawędziami oraz usuwa wszystkie odniesienia (z krawędziami) do usuniętego wierzchołka.
Poniższa instrukcja przedstawia podstawową składnię polecenia Usuń wierzchołek.
DELETE VERTEX <vertex> [WHERE <conditions>]
[LIMIT <MaxRecords>>] [BATCH <batch-size>]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<vertex> - Definiuje wierzchołek, który chcesz usunąć, używając jego klasy, identyfikatora rekordu lub zapytania podrzędnego.
WHERE - Filtruje warunek, aby określić, które rekordy usuwa polecenie.
LIMIT - Określa maksymalną liczbę rekordów do usunięcia.
BATCH - Określa, ile rekordów jest usuwanych jednocześnie przez polecenie, umożliwiając dzielenie dużych transakcji na mniejsze bloki, aby zaoszczędzić na zużyciu pamięci.
Przykład
Wypróbuj następujące polecenie, aby dowiedzieć się, jak usunąć pojedynczy wierzchołek lub wiele wierzchołków.
Wykonaj następujące polecenie, aby usunąć wierzchołek „# 14: 1”.
orientdb> DELETE VERTEX #14:1
Jeśli powyższe polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Delete record(s) '1' in 0.005000 sec(s)
Wykonaj następujące polecenie, aby usunąć wszystkie wierzchołki z klasy „Klient” oznaczonej właściwością „isSpam”.
orientdb> DELETE VERTEX Customer WHERE isSpam = TRUE
Jeśli powyższe polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Delete record(s) '3' in 0.005000 sec(s)
W OrientDB koncepcja Edgedziała jak relacja między wierzchołkami za pomocą pewnych właściwości. Krawędzie i wierzchołki są głównymi składnikami bazy danych grafów. Stosuje polimorfizm na krawędziach. Klasą bazową dla Edge jest E. Podczas implementowania krawędzi, jeśli brakuje wierzchołków źródłowych lub docelowych lub nie istnieją, transakcja zostanie wycofana.
Poniższa instrukcja przedstawia podstawową składnię polecenia Create Edge.
CREATE EDGE <class> [CLUSTER <cluster>] FROM <rid>|(<query>)|[<rid>]* TO <rid>|(<query>)|[<rid>]*
[SET <field> = <expression>[,]*]|CONTENT {<JSON>}
[RETRY <retry> [WAIT <pauseBetweenRetriesInMs]] [BATCH <batch-size>]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<class> - Określa nazwę klasy dla krawędzi.
<cluster> - Definiuje klaster, w którym chcesz przechowywać krawędź.
JSON - Zapewnia zawartość JSON do ustawienia jako rekord.
RETRY - Określa liczbę ponownych prób w przypadku konfliktu.
WAIT - Definiuje czas opóźnienia między ponownymi próbami w milisekundach.
BATCH - Określa, czy rozbija polecenie na mniejsze bloki oraz rozmiar partii.
Przykład
Wykonaj następujące zapytanie, aby utworzyć krawędź E między dwoma wierzchołkami # 9: 0 i # 14: 0.
orientdb> CREATE EDGE FROM #11:4 TO #13:2
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Created edge '[e[#10:0][#9:0->#14:0]]' in 0.012000 sec(s)
Wykonaj następujące zapytanie, aby utworzyć nowy typ krawędzi i krawędź nowego typu.
orientdb> CREATE CLASS E1 EXTENDS E
orientdb> CREATE EDGE E1 FROM #10:3 TO #11:4
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Created edge '[e[#10:1][#10:3->#11:4]]' in 0.011000 sec(s)
Update edgePolecenie służy do aktualizacji rekordów krawędzi w bieżącej bazie danych. Jest to równoważne rzeczywistemu poleceniu aktualizacji, oprócz sprawdzania i utrzymywania spójności wykresu z wierzchołkami, w przypadku zaktualizowania plikuout i in nieruchomości.
Poniższa instrukcja przedstawia podstawową składnię polecenia Update Edge.
UPDATE EDGE <edge>
[SET|INCREMENT|ADD|REMOVE|PUT <field-name> = <field-value> [,]*]|[CONTENT|MERGE <JSON>]
[RETURN <returning> [<returning-expression>]]
[WHERE <conditions>]
[LOCK default|record]
[LIMIT <max-records>] [TIMEOUT <timeout>]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<edge>- Określa krawędź, którą chcesz zaktualizować. Możesz wybierać międzyClass która aktualizuje krawędzie według klasy, Cluster która aktualizuje krawędzie według klastra, używając przedrostka CLUSTER lub Record ID że aktualizowanie krawędzi według identyfikatora rekordu.
SET - Aktualizuje pole do podanych wartości.
INCREMENT - Zwiększa dane pole o wartość.
ADD - Definiuje element do dodania do zbioru pól.
REMOVE - Definiuje element do usunięcia ze zbioru pól.
PUT - Definiuje wpis do umieszczenia w polach mapy.
RETURN - Definiuje wyrażenie, które ma zostać zwrócone po uruchomieniu aktualizacji.
WHERE - Określa stan filtra.
LOCK - Określa, w jaki sposób rekord jest blokowany między ładowaniem a aktualizacjami.
LIMIT - Określa maksymalną liczbę rekordów.
Przykład
Rozważmy przykład aktualizacji krawędzi o nazwie „adres” w klasie osoby poprzez pobranie danych z tabeli adresów mającej obszar Id = 001 i imię osoby = Kryszna.
orientdb> UPDATE EDGE address SET out = (SELECT FROM Address WHERE areaID = 001)
WHERE name = 'krishna'
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Updated edge '[address[#10:3][#11:3->#14:2]]' in 0.012000 sec(s)
Delete edgepolecenie służy do usuwania bazy danych. Jest to odpowiednik polecenia usuwania, z dodatkiem sprawdzania i utrzymywania spójności z wierzchołkami poprzez usunięcie wszystkich odsyłaczy do krawędzi zarówno z właściwości wierzchołka „we”, jak i „na zewnątrz”.
Poniższa instrukcja przedstawia podstawową składnię polecenia Usuń krawędź.
DELETE EDGE
( <rid>
|
[<rid> (, <rid>)*]
|
( [ FROM (<rid> | <select_statement> ) ] [ TO ( <rid> | <select_statement> ) ] )
|
[<class>]
(
[WHERE <conditions>]
[LIMIT <MaxRecords>]
[BATCH <batch-size>]
))
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
FROM - Określa punkt początkowy wierzchołka krawędzi do usunięcia.
To - Definiuje końcowy wierzchołek krawędzi do usunięcia.
WHERE - Określa warunki filtrowania.
LIMIT - Określa maksymalną liczbę krawędzi do usunięcia.
BATCH - Określa rozmiar bloku dla operacji.
Przykład
Wypróbuj poniższe przykłady, aby dowiedzieć się, jak usuwać krawędzie.
Wykonaj następujące zapytanie, aby usunąć krawędź między dwoma wierzchołkami (# 11: 2, # 11: 10). Ale może być szansa, że między dwoma wierzchołkami może istnieć jedna lub więcej krawędzi. Abyśmy używali właściwości date do prawidłowego działania. To zapytanie usunie krawędzie utworzone na '2015-01-15' i później.
orientdb {db = demo}> DELETE EDGE FROM #11:2 TO #11:10 WHERE date >= "2012-01-15"
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Delete record(s) '2' in 0.00200 sec(s)
Wykonaj następujące zapytanie, aby usunąć krawędzie zaczynające się od wierzchołka „# 11: 5” do wierzchołka „# 11: 10” i które są powiązane z „class = Customer”.
orientdb {db = demo}> DELETE EDGE FROM #11:5 TO #11:10 WHERE @class = 'Customer'
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Delete record(s) '2' in 0.00200 sec(s)
W tym rozdziale wyjaśniono pełne omówienie różnych typów funkcji w OrientDB. Poniższa tabela zawiera listę funkcji, które są podzielone na kategorie według ich funkcjonalności.
Funkcje wykresów
Sr.No. | Nazwa i opis funkcji |
---|---|
1 | Out(): Pobiera sąsiednie wierzchołki wychodzące, zaczynając od bieżącego rekordu jako Vertex. Syntax - out ([<label-1>] [, <label-n>] *) |
2 | In(): Pobiera sąsiednie przychodzące wierzchołki, zaczynając od bieżącego rekordu jako Vertex. Syntax - w ([<label-1>] [, <label-n>] *) |
3 | Both(): Pobiera sąsiednie wierzchołki wychodzące i przychodzące, zaczynając od bieżącego rekordu jako Vertex. Syntax - oba ([<label1>] [, <label-n>] *) |
4 | outE(): Pobiera sąsiednie krawędzie wychodzące, zaczynając od bieżącego rekordu jako Vertex. Syntax - outE ([<label1>] [, <label-n>] *) |
5 | inE(): Pobiera sąsiednie krawędzie przychodzące, zaczynając od bieżącego rekordu jako Vertex. Syntax - inE ([<label1>] [, <label-n>] *) |
6 | bothE(): Pobiera sąsiednie krawędzie wychodzące i przychodzące, zaczynając od bieżącego rekordu jako Vertex. Syntax - obaE ([<label1>] [, <label-n>] *) |
7 | outV(): Pobiera wychodzące wierzchołki, zaczynając od bieżącego rekordu jako Edge. Syntax - outV () |
8 | inV(): Pobierz nadchodzące wierzchołki z bieżącego rekordu jako Edge. Syntax - inV () |
9 | traversedElement(): Zwraca przemierzane elementy w poleceniach ciągu poligonowego. Syntax - traversedElement (<index> [, <items>]) |
10 | traversedVertex(): Zwróć przecięty wierzchołek (y) w poleceniach ciągu poligonowego. Syntax - traversedVertex (<index> [, <items>]) |
11 | traversedEdge(): Zwraca przechodzącą krawędź (e) w poleceniach ciągu poligonowego. Syntax - traversedEdge (<index> [, <items>]) |
12 | shortestPath(): Zwraca najkrótszą ścieżkę między dwoma wierzchołkami. Kierunek może być OUT (domyślnie), IN lub BOTH. Synatx - shortestPath (<sourceVertex>, <destinationVertex> [, <direction> [, <edgeClassName>]]) |
13 | dijkstra(): Zwraca najtańszą ścieżkę między dwoma wierzchołkami przy użyciu algorytmu Dijkstry. Syntax - dijkstra (<sourceVertex>, <destinationVertex>, <weightEdgeFieldName> [, <direction>]) |
Wypróbuj kilka funkcji wykresów wraz z następującymi zapytaniami.
Wykonaj następujące zapytanie, aby pobrać wszystkie wychodzące wierzchołki ze wszystkich wierzchołków pojazdu.
orientdb {db = demo}>SELECT out() from Vehicle
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
---+----------+---------
# | @class | out
---+----------+---------
0 | Vehicle | #11:2
1 | Vehicle | #13:1
2 | Vehicle | #13:4
---+----------+---------
Wykonaj następujące zapytanie, aby pobrać zarówno przychodzące, jak i wychodzące wierzchołki z wierzchołka 11: 3.
orientdb {db = demo}>SELECT both() FROM #11:3
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
---+----------+--------+-------
# | @class | out | in
---+----------+--------+-------
0 | Vehicle | #13:2 | #10:2
---+----------+-------+-------
Funkcje matematyczne
Sr.No. | Nazwa i opis funkcji |
---|---|
1 | eval(): Oblicza wyrażenie w cudzysłowie (lub w cudzysłowie). Syntax - eval ('<expression>') |
2 | min(): Zwraca minimalną wartość. Jeśli zostanie wywołany z więcej niż jednym parametrem, zwraca minimalną wartość argumentu między wszystkimi argumentami. Syntax - min (<pole> [, <pole-n>] *) |
3 | max(): Zwraca maksymalną wartość. W przypadku wywołania z więcej niż jednym parametrem zwraca maksymalną wartość między wszystkimi argumentami. Syntax - max (<field> [, <field-n>] *) |
4 | sum() Zwraca sumę wszystkich zwróconych wartości. Syntax - suma (<pole>) |
5 | abs(): Zwraca wartość bezwzględną. Działa z liczbami Integer, Long, Short, Double, Float, BigInteger, BigDecimal, null. Syntax - abs (<pole>) |
6 | avg(): Zwraca średnią wartość. Syntax - avg (<pole>) |
7 | count(): Zlicza rekord, który pasuje do warunku zapytania. Jeśli * nie jest używane jako pole, rekord będzie liczony tylko wtedy, gdy zawartość nie jest pusta. Syntax - liczba (<pole>) |
8 | mode(): Zwraca wartość, która występuje z największą częstotliwością. Wartości zerowe są ignorowane w obliczeniach. Syntax - tryb (<pole>) |
9 | median(): Zwraca wartość środkową lub wartość interpolowaną, która reprezentuje wartość środkową po posortowaniu wartości. Wartości zerowe są ignorowane w obliczeniach. Syntax - mediana (<pole>) |
10 | percentile(): Zwraca n-ty percentyl. W obliczeniach ignorowana jest wartość Null. Syntax - percentyl (<pole> [, <quantile-n>] *) |
11 | variance() Zwraca środkową wariancję: średnią kwadratową różnicę od średniej.
Syntax - wariancja (<pole>) |
12 | stddev() Zwraca odchylenie standardowe: miara rozłożenia wartości. Wartości zerowe są ignorowane w obliczeniach. Syntax - stddev (<pole>) |
Wypróbuj kilka funkcji matematycznych, używając następujących zapytań.
Wykonaj następujące zapytanie, aby uzyskać sumę wynagrodzeń wszystkich pracowników.
orientdb {db = demo}>SELECT SUM(salary) FROM Employee
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
---+----------+---------
# | @CLASS | sum
---+----------+---------
0 | null | 150000
---+----------+---------
Wykonaj następujące zapytanie, aby uzyskać średnią pensję wszystkich pracowników.
orientdb {db = demo}>SELECT avg(salary) FROM Employee
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
---+----------+---------
# | @CLASS | avg
---+----------+---------
0 | null | 25
---+----------+---------
Funkcje kolekcji
Sr.No. | Nazwa i opis funkcji |
---|---|
1 | set(): Dodaje wartość do zestawu. Jeśli wartość jest zbiorem, to jest scalana z zestawem, w przeciwnym razie dodawana jest wartość <value>. Syntax - ustaw (<pole>) |
2 | map(): Dodaje wartość do mapy przy pierwszym tworzeniu mapy. Jeśli <value> jest mapą, to jest scalane z mapą, w przeciwnym razie para <key> i <value> jest dodawana do mapy jako nowy wpis. Syntax - mapa (<klucz>, <wartość>) |
3 | ist(): Dodaje wartość do listy przy pierwszym utworzeniu listy. Jeśli <wartość> jest zbiorem, to jest scalana z listą, w przeciwnym razie <wartość> jest dodawana do listy. Syntax - lista (<pole>) |
4 | difference(): Działa jako agregat lub wbudowany. Jeśli przekazano tylko jeden argument, agreguje, w przeciwnym razie wykonuje i zwraca RÓŻNICĘ między kolekcjami otrzymanymi jako parametry. Syntax - różnica (<field> [, <field-n>] *) |
5 | first(): Pobiera tylko pierwszą pozycję z pól wielowartościowych (tablice, kolekcje i mapy). W przypadku typów innych niż wielowartościowe po prostu zwraca wartość. Syntax - pierwszy (<pole>) |
6 | intersect(): Działa jako agregat lub wbudowany. Jeśli przekazany zostanie tylko jeden argument, agreguje, w przeciwnym razie wykonuje i zwraca INTERAKCJĘ kolekcji odebranych jako parametry. Syntax - przecięcie (<field> [, <field-n>] *) |
7 | distinct(): Pobiera tylko unikatowe wpisy danych w zależności od pola określonego jako argument. Główną różnicą w porównaniu ze standardowym SQL DISTINCT jest to, że w OrientDB można określić funkcję z nawiasami i tylko jedno pole. Syntax - wyraźny (<pole>) |
8 | expand(): Ta funkcja ma dwa znaczenia -
Syntax - rozwiń (<pole>) |
9 | unionall(): Działa jako agregat lub wbudowany. Jeśli przekazano tylko jeden argument, agreguje, w przeciwnym razie wykonuje i zwraca UNION wszystkich kolekcji odebranych jako parametry. Działa również bez wartości kolekcji. Syntax - unionall (<field> [, <field-n>] *) |
10 | flatten(): Wyodrębnia kolekcję z pola i wykorzystuje ją jako wynik. Jest przestarzały, zamiast tego użyj expand (). Syntax - spłaszcz (<pole>) |
11 | last(): Pobiera tylko ostatnią pozycję z pól wielowartościowych (tablice, kolekcje i mapy). W przypadku typów innych niż wielowartościowe po prostu zwraca wartość. Syntax - ostatnia (<pole>) |
12 | symmetricDifference(): Działa jako agregat lub wbudowany. Jeśli przekazano tylko jeden argument, agreguje, w przeciwnym razie wykonuje i zwraca RÓŻNOŚĆ SYMETRYCZNĄ między kolekcjami odebranymi jako parametry. Syntax - symmetricDifference (<field> [, <field-n>] *) |
Wypróbuj kilka funkcji kolekcji, korzystając z następujących zapytań.
Wykonaj następujące zapytanie, aby uzyskać zestaw nauczycieli, uczących klasę 9.
orientdb {db = demo}>SELECT ID, set(teacher.id) AS teacherID from classess where class_id = 9
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
---+----------+--------+--------------------------
# | @CLASS | id | TeacherID
---+----------+--------+--------------------------
0 | null | 9 | 1201, 1202, 1205, 1208
---+----------+-------+---------------------------
Różne funkcje
Sr.No. | Nazwa i opis funkcji |
---|---|
1 | date(): Zwraca datę formatującą ciąg. <data-as-string> to data w formacie ciągu, a <format> to format daty zgodny z tymi regułami. Syntax - data (<date-as-string> [<format>] [, <timezone>]) |
2 | sysdate(): Zwraca bieżącą datę i godzinę. Syntax - sysdate ([<format>] [, <timezone>]) |
3 | format(): Formatuje wartość przy użyciu konwencji String.format (). Syntax - format (<format> [, <arg1>] (, <arg-n>] *. Md) |
4 | distance(): Zwraca odległość między dwoma punktami na kuli ziemskiej za pomocą algorytmu Haversine. Współrzędne muszą być stopniami. Syntax - odległość (<x-field>, <y-field>, <x-value>, <y-value>) |
5 | ifnull(): Zwraca przekazane pole / wartość (lub opcjonalny parametr return_value_if_not_null). Jeśli pole / wartość nie jest null, zwraca wartość_powrotu_jeśli_null. Syntax - ifnull (<pole | wartość>, <return_value_if_null> [, <return_value_if_not_null>] (, <pole & .md # 124; wartość>] *) |
6 | coalesce(): Zwraca pierwsze pole / wartość niepuste. Jeśli żadne pole / wartość nie jest puste, zwraca wartość null. Syntax - coalesce (<pole | wartość> [, <pole-n | wartość-n>] *) |
7 | uuid(): Generuje UUID jako 128-bitową wartość przy użyciu wariantu Leach-Salz. Syntax - uuid () |
8 | if(): Oblicza warunek (pierwsze parametry) i zwraca drugi parametr, jeśli warunek jest prawdziwy, a trzeci w przeciwnym razie. Syntax - if (<expression>, <result-if-true>, <result-if-false>) |
Wypróbuj różne funkcje, korzystając z następujących zapytań.
Wykonaj następujące zapytanie, aby dowiedzieć się, jak wykonać wyrażenie if.
orientdb {db = demo}> SELECT if(eval("name = 'satish'"), "My name is satish",
"My name is not satish") FROM Employee
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+--------+-----------------------
# |@CLASS | IF
----+--------+-----------------------
0 |null |My name is satish
1 |null |My name is not satish
2 |null |My name is not satish
3 |null |My name is not satish
4 |null |My name is not satish
----+--------+------------------------
Wykonaj następujące zapytanie, aby uzyskać datę systemową.
orientdb {db = demo}> SELECT SYSDATE() FROM Employee
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+--------+-----------------------
# |@CLASS | SYSDATE
----+--------+-----------------------
0 |null |2016-02-10 12:05:06
1 |null |2016-02-10 12:05:06
2 |null |2016-02-10 12:05:06
3 |null |2016-02-10 12:05:06
4 |null |2016-02-10 12:05:06
----+--------+------------------------
Używając dokładnie tej funkcji, możesz łatwo manipulować danymi OrientDB.
Sequencesjest pojęciem używanym w mechanizmie autoinkrementacji i zostało wprowadzone w OrientDB v2.2. W terminologii baz danych sekwencja to struktura zarządzająca polem licznika. Mówiąc prościej, sekwencje są najczęściej używane, gdy potrzebujesz liczby, która zawsze rośnie. Obsługuje dwa typy -
ORDERED - Za każdym razem, gdy wskaźnik wywołuje metodę .next, która zwraca nową wartość.
CACHED- Sekwencja buforuje „N” elementów w każdym węźle. Aby nazwać każdy przedmiot, którego używamy.next(), co jest preferowane, gdy pamięć podręczna zawiera więcej niż jeden element.
Utwórz sekwencję
Sekwencja jest zwykle używana do automatycznego zwiększania wartości identyfikatora osoby. Podobnie jak inne koncepcje języka SQL w OrientDB, również wykonuje podobne operacje jak Sekwencja w RDBMS.
Poniższa instrukcja przedstawia podstawową składnię do tworzenia sekwencji.
CREATE SEQUENCE <sequence> TYPE <CACHED|ORDERED> [START <start>]
[INCREMENT <increment>] [CACHE <cache>]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<Sequence> - Lokalna nazwa sekwencji.
TYPE - Określa typ sekwencji ZAMÓWIONE lub ZAPISANE.
START - Określa wartość początkową.
INCREMENT - Definiuje przyrost dla każdego wywołania metody .next.
CACHE - Określa liczbę wartości do wstępnego buforowania w przypadku użycia do buforowania typu sekwencji.
Let us create a sequence named ‘seqid’ which starts with number 1201. Try the following queries to implement this example with sequence.
CREATE SEQUENCE seqid START 1201
If the above query is executed successfully, you will get the following output.
Sequence created successfully
Try the following query to use sequence ‘seqid’ to insert the id value of Account table.
INSERT INTO Account SET id = sequence('seqid').next()
If the above query is executed successfully, you will get the following output.
Insert 1 record(s) in 0.001000 sec(s)
Alter Sequence
Alter sequence is a command used to change the properties of a sequence. It will modify all the sequence options except sequence type.
The following statement is the basic syntax to alter sequence.
ALTER SEQUENCE <sequence> [START <start-point>]
[INCREMENT <increment>] [CACHE <cache>]
Following are the details about the options in the above syntax.
<Sequence> − Defines the sequence you want to change.
START − Defines the initial value.
INCREMENT − Defines the increment for each .next method call.
CACHE − Defines the number of value to pre-cache in the event that you used to cache sequence type.
Try the following query to alter the start value from ‘1201 to 1000’ of a sequence named seqid.
ALTER SEQUENCE seqid START 1000
If the above query is executed successfully, you will get the following output.
Altered sequence successfully
Drop Sequence
Drop sequence is a command used to drop a sequence.
The following statement is the basic syntax to drop a sequence.
DROP SEQUENCE <sequence>
Where <Sequence> defines the sequence you want to drop.
Try the following query to drop a sequence named ‘seqid’.
DROP SEQUENCE seqid
If the above query is executed successfully, you will get the following output.
Sequence dropped successfully
Index is a pointer which points to a location of data in the database. Indexing is a concept used to quickly locate the data without having to search every record in a database. OrientDB supports four index algorithms and several types within each.
The four types of index are −
SB-Tree Index
It provides a good mix of features available from other index types. Better to use this for general utility. It is durable, transactional and supports range queries. It is default index type. The different type plugins that support this algorithm are −
UNIQUE − These indexes do not allow duplicate keys. For composite indexes, this refers to the uniqueness of the composite keys.
NOTUNIQUE − These indexes allow duplicate keys.
FULLTEXT − These indexes are based on any single word of text. You can use them in queries through the CONTAINSTEXT operator.
DICTIONARY − These indexes are similar to those that use UNIQUE, but in the case of duplicate keys, they replace the existing record with the new record.
Hash Index
It performs faster and is very light in disk usage. It is durable, transactional, but does not support range queries. It works like HASHMAP, which makes it faster on punctual lookups and it consumes less resources than other index types. The different type plugins that support this algorithm are −
UNIQUE_HASH_INDEX- Te indeksy nie zezwalają na zduplikowane klucze. W przypadku indeksów złożonych odnosi się to do niepowtarzalności kluczy złożonych.
NOTUNIQUE_HASH_INDEX - Te indeksy zezwalają na zduplikowane klucze.
FULLTEXT_HASH_INDEX- Te indeksy są oparte na każdym pojedynczym słowie tekstu. Możesz ich używać w zapytaniach za pomocą operatora CONTAINSTEXT.
DICTIONARY_HASH_INDEX - Te indeksy są podobne do tych, które używają UNIQUE_HASH_INDEX, ale w przypadku zduplikowanych kluczy zastępują istniejący rekord nowym rekordem.
Indeks pełnotekstowy Lucene
Zapewnia dobre indeksy pełnotekstowe, ale nie można go używać do indeksowania innych typów. Jest trwały, transakcyjny i obsługuje zapytania o zakres.
Indeks przestrzenny Lucene
Zapewnia dobre indeksy przestrzenne, ale nie może być używany do indeksowania innych typów. Jest trwały, transakcyjny i obsługuje zapytania o zakres.
Tworzenie indeksów
Utwórz indeks to polecenie tworzenia indeksu w określonym schemacie.
Poniższa instrukcja przedstawia podstawową składnię do tworzenia indeksu.
CREATE INDEX <name> [ON <class-name> (prop-names)] <type> [<key-type>]
[METADATA {<metadata>}]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<name>- definiuje logiczną nazwę indeksu. Możesz również użyć notacji <class.property>, aby utworzyć automatyczny indeks powiązany z właściwością schematu. <class> używa klasy schematu, a <property> używa właściwości utworzonej w klasie.
<class-name>- Podaje nazwę klasy, dla której tworzysz automatyczny indeks do indeksowania. Ta klasa musi istnieć w bazie danych.
<prop-names>- Zawiera listę właściwości, które mają być indeksowane przez automatyczny indeks. Te właściwości muszą już istnieć w schemacie.
<type> - Zapewnia algorytm i typ indeksu, który chcesz utworzyć.
<key-type> - Zapewnia opcjonalny typ klucza z automatycznymi indeksami.
<metadata> - Zapewnia reprezentację JSON.
Przykład
Spróbuj wykonać następujące zapytanie, aby utworzyć automatyczny indeks powiązany z właściwością „ID” użytkownika sales_user.
orientdb> CREATE INDEX indexforID ON sales_user (id) UNIQUE
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Creating index...
Index created successfully with 4 entries in 0.021000 sec(s)
Zapytania o indeksy
Możesz użyć zapytania wybierającego, aby pobrać rekordy w indeksie.
Spróbuj wykonać następujące zapytanie, aby pobrać klucze indeksu o nazwie „indexforId”.
SELECT FROM INDEX:indexforId
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+------+----+-----
# |@CLASS|key |rid
----+------+----+-----
0 |null |1 |#11:7
1 |null |2 |#11:6
2 |null |3 |#11:5
3 |null |4 |#11:8
----+------+----+-----
Upuść indeksy
Jeśli chcesz usunąć określony indeks, możesz użyć tego polecenia. Ta operacja nie usuwa połączonych rekordów.
Poniższa instrukcja przedstawia podstawową składnię do usuwania indeksu.
DROP INDEX <name>
Gdzie <name> zawiera nazwę indeksu, który chcesz usunąć.
Spróbuj wykonać następujące zapytanie, aby usunąć indeks o nazwie „ID” użytkownika sales_user.
DROP INDEX sales_users.Id
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Index dropped successfully
Podobnie jak RDBMS, OrientDB obsługuje właściwości ACID transakcji. ZAtransactionobejmuje jednostkę pracy wykonywaną w systemie zarządzania bazą danych. Istnieją dwa główne powody utrzymywania transakcji w środowisku bazy danych.
Aby umożliwić równoczesne odzyskiwanie po awariach i zachować spójność bazy danych nawet w przypadku awarii systemu.
Zapewnienie izolacji między programami korzystającymi jednocześnie z bazy danych.
Domyślnie transakcja bazy danych musi być zgodna z właściwościami ACID, takimi jak właściwości Atomic, Consistent, Isolated i Durable. Ale OrientDB jest bazą danych zgodną z ACID, co oznacza, że nie zaprzecza ani nie neguje pojęcia ACID, ale zmienia swoje postrzeganie podczas obsługi bazy danych NoSQL. Zobacz, jak właściwości ACID współpracują z bazą danych NoSQL.
Atomic - Kiedy robisz coś, aby zmienić bazę danych, zmiana powinna zadziałać lub zakończyć się niepowodzeniem.
Consistent - Baza danych powinna pozostać spójna.
Isolated - Jeśli inne transakcje są wykonywane w tym samym czasie, użytkownik nie będzie mógł zobaczyć rekordów w trakcie wykonywania równoległego.
Durable - Jeśli system ulegnie awarii (sprzęt lub oprogramowanie), sama baza danych powinna mieć możliwość wykonania kopii zapasowej.
Transakcję bazy danych można uzyskać za pomocą poleceń Commit i Rollback.
Popełnić
Zatwierdzenie oznacza zamknięcie transakcji poprzez zapisanie wszystkich zmian w bazie danych. Wycofywanie oznacza odzyskanie stanu bazy danych do punktu, w którym otworzyłeś transakcję.
Poniższa instrukcja przedstawia podstawową składnię polecenia bazy danych COMMIT.
COMMIT
Note - Komendy można użyć dopiero po połączeniu się z daną bazą danych i po rozpoczęciu transakcji.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy we wcześniejszym rozdziale tego samouczka. Zobaczymy operację zatwierdzania transakcji i zapiszemy rekord przy użyciu transakcji.
Musisz najpierw rozpocząć transakcję za pomocą następującego polecenia BEGIN.
orientdb {db = demo}> BEGIN
Wstaw rekord do tabeli pracowników z wartościami id = 12 i name = satish.P, używając następującego polecenia.
orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')
Możesz użyć następującego polecenia, aby zatwierdzić transakcję.
orientdb> commit
Jeśli ta transakcja została pomyślnie zatwierdzona, otrzymasz następujące dane wyjściowe.
Transaction 2 has been committed in 4ms
Wycofywanie
Wycofywanie oznacza odzyskiwanie stanu bazy danych do momentu otwarcia transakcji.
Poniższa instrukcja przedstawia podstawową składnię polecenia bazy danych ROLLBACK.
ROLLBACK
Note - Komendy można użyć dopiero po połączeniu się z daną bazą danych i po rozpoczęciu transakcji.
Przykład
W tym przykładzie użyjemy tej samej bazy danych o nazwie „demo”, którą utworzyliśmy we wcześniejszym rozdziale samouczka. Zobaczymy operację wycofywania transakcji i zapiszemy rekord przy użyciu transakcji.
Musisz najpierw rozpocząć transakcję za pomocą następującego polecenia BEGIN.
orientdb {db = demo}> BEGIN
Wstaw rekord do tabeli pracowników z wartościami id = 12 i name = satish.P, używając następującego polecenia.
orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')
Możesz użyć następującego polecenia, aby pobrać rekordy pracownika tabeli.
orientdb> SELECT FROM employee WHERE name LIKE '%.P'
Jeśli to polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
---+-------+--------------------
# | ID | name
---+-------+--------------------
0 | 12 | satish.P
---+-------+--------------------
1 item(s) found. Query executed in 0.076 sec(s).
Możesz użyć następującego polecenia, aby wycofać tę transakcję.
orientdb> ROLLBACK
Sprawdź ponownie kwerendę wybierającą, aby pobrać ten sam rekord z tabeli Employee.
orientdb> SELECT FROM employee WHERE name LIKE '%.P'
Jeśli wycofanie zostanie wykonane pomyślnie, otrzymasz 0 rekordów znalezionych w wyniku.
0 item(s) found. Query executed in 0.037 sec(s).
OrientDB Hooksto nic innego jak wyzwalacze w terminologii bazy danych, które włączają zdarzenia wewnętrzne przed i po każdej operacji CRUD w aplikacjach użytkownika. Za pomocą punktów zaczepienia można pisać niestandardowe reguły walidacji, wymuszać bezpieczeństwo lub organizować zdarzenia zewnętrzne, takie jak replikacja względem relacyjnego systemu DBMS.
OrientDB obsługuje dwa rodzaje haków -
Dynamic Hook - Wyzwalacze, które można budować na poziomie klasy i / lub na poziomie dokumentu.
Java (Native) Hook - Wyzwalacze, które można zbudować za pomocą klas Java.
Dynamic Hooks
Dynamiczne podpięcia są bardziej elastyczne niż podpięcia Java, ponieważ można je zmieniać w czasie wykonywania i w razie potrzeby mogą być uruchamiane dla każdego dokumentu, ale są wolniejsze niż podpięcia Java.
Aby wykonać przechwyty na dokumentach, najpierw pozwól swoim klasom na rozszerzenie OTriggeredklasa bazowa. Później zdefiniuj właściwość niestandardową dla zainteresowanego zdarzenia. Poniżej znajdują się dostępne wydarzenia.
onBeforeCreate - Zadzwoniłem before tworzenie nowego dokumentu.
onAfterCreate - Zadzwoniłem after tworzenie nowego dokumentu.
onBeforeRead - Zadzwoniłem before czytanie dokumentu.
onAfterRead - Zadzwoniłem after czytanie dokumentu.
onBeforeUpdate - Zadzwoniłem before aktualizacja dokumentu.
onAfterUpdate - Zadzwoniłem after aktualizacja dokumentu.
onBeforeDelete - Zadzwoniłem before usuwanie dokumentu.
onAfterDelete - Zadzwoniłem after usuwanie dokumentu.
Dynamiczne hooki mogą dzwonić -
Funkcje napisane w SQL, Javascript lub dowolnym języku obsługiwanym przez OrientDB i JVM.
Metody statyczne Java.
Haki na poziomie klasy
Haki na poziomie klasy są zdefiniowane dla wszystkich dokumentów, które odnoszą się do klasy. Poniżej znajduje się przykład konfiguracji haka, który działa na poziomie klasy w stosunku do dokumentów faktur.
CREATE CLASS Invoice EXTENDS OTriggered
ALTER CLASS Invoice CUSTOM onAfterCreate = invoiceCreated
Stwórzmy funkcję invoiceCreated w Javascript, który wyświetla w konsoli serwera numer utworzonej faktury.
CREATE FUNCTION invoiceCreated "print('\\nInvoice created: ' + doc.field ('number'));"
LANGUAGE Javascript
Teraz wypróbuj hak, tworząc nowy Invoice dokument.
INSERT INTO Invoice CONTENT {number: 100, notes: 'This is a test}
Jeśli to polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Invoice created: 100
Zaczep poziomu dokumentu
Możesz zdefiniować akcję specjalną tylko dla jednego lub kilku dokumentów. Aby to zrobić, pozwól swojej klasie na rozszerzenieOTriggered klasa.
Na przykład uruchommy wyzwalacz, jako funkcję JavaScript, w odniesieniu do istniejącej klasy Profile, dla wszystkich dokumentów z właściwością konto = „Premium”. Uruchomiony zostanie wyzwalacz, aby zapobiec usunięciu dokumentów.
ALTER CLASS Profile SUPERCLASS OTriggered UPDATE Profile
SET onBeforeDelete = 'preventDeletion' WHERE account = 'Premium'
Stwórzmy preventDeletion() Funkcja JavaScript.
CREATE FUNCTION preventDeletion "throw new java.lang.RuntimeException('Cannot
delete Premium profile ' + doc)" LANGUAGE Javascript
Następnie przetestuj haczyk, próbując usunąć konto „Premium”.
DELETE FROM #12:1
java.lang.RuntimeException: Cannot delete Premium profile
profile#12:1{onBeforeDelete:preventDeletion,account:Premium,name:Jill} v-1
(<Unknown source>#2) in <Unknown source> at line number 2
Haczyki JAVA
Jednym z typowych przypadków użycia hooków OrientDB (wyzwalaczy) jest zarządzanie utworzonymi i zaktualizowanymi datami dla dowolnej lub wszystkich klas. Na przykład możesz ustawić plikCreatedDate za każdym razem, gdy tworzony jest rekord i ustawiany jest plik UpdatedDate za każdym razem, gdy rekord jest aktualizowany, i rób to w taki sposób, aby logikę zaimplementować raz w warstwie bazy danych i nigdy więcej nie martwić się o to w warstwie aplikacji.
Przed utworzeniem będziesz musiał pobrać orientdb-core.jarplik, odwiedzając poniższe łącze pobierz rdzeń OrientDB . A później skopiuj ten plik jar do folderu, w którym chcesz przechowywać plik źródłowy Java.
Utwórz plik hooka
Utwórz plik Java o nazwie HookTest.java, który przetestuje mechanizm hooka przy użyciu języka Java.
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
import com.orientechnologies.orient.core.hook.ODocumentHookAbstract;
import com.orientechnologies.orient.core.hook.ORecordHook;
import com.orientechnologies.orient.core.hook.ORecordHookAbstract;
import com.orientechnologies.orient.core.db.ODatabaseLifecycleListener;
import com.orientechnologies.orient.core.db.ODatabase;
import com.orientechnologies.orient.core.record.ORecord;
import com.orientechnologies.orient.core.record.impl.ODocument;
public class HookTest extends ODocumentHookAbstract implements ORecordHook {
public HookTest() {
}
@Override
public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
return DISTRIBUTED_EXECUTION_MODE.BOTH;
}
public RESULT onRecordBeforeCreate( ODocument iDocument ) {
System.out.println("Ran create hook");
return ORecordHook.RESULT.RECORD_NOT_CHANGED;
}
public RESULT onRecordBeforeUpdate( ODocument iDocument ) {
System.out.println("Ran update hook");
return ORecordHook.RESULT.RECORD_NOT_CHANGED;
}
}
Powyższy przykładowy kod drukuje odpowiedni komentarz za każdym razem, gdy tworzysz lub aktualizujesz rekord tej klasy.
Dodajmy jeszcze jeden plik hook setCreatedUpdatedDates.java w następujący sposób -
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
import com.orientechnologies.orient.core.hook.ODocumentHookAbstract;
import com.orientechnologies.orient.core.hook.ORecordHook;
import com.orientechnologies.orient.core.hook.ORecordHookAbstract;
import com.orientechnologies.orient.core.db.ODatabaseLifecycleListener;
import com.orientechnologies.orient.core.db.ODatabase;
import com.orientechnologies.orient.core.record.ORecord;
import com.orientechnologies.orient.core.record.impl.ODocument;
public class setCreatedUpdatedDates extends ODocumentHookAbstract implements ORecordHook {
public setCreatedUpdatedDates() {
}
@Override
public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
return DISTRIBUTED_EXECUTION_MODE.BOTH;
}
public RESULT onRecordBeforeCreate( ODocument iDocument ) {
if ((iDocument.getClassName().charAt(0) == 't') || (iDocument.getClassName().charAt(0)=='r')) {
iDocument.field("CreatedDate", System.currentTimeMillis() / 1000l);
iDocument.field("UpdatedDate", System.currentTimeMillis() / 1000l);
return ORecordHook.RESULT.RECORD_CHANGED;
} else {
return ORecordHook.RESULT.RECORD_NOT_CHANGED;
}
}
public RESULT onRecordBeforeUpdate( ODocument iDocument ) {
if ((iDocument.getClassName().charAt(0) == 't') || (iDocument.getClassName().charAt(0)=='r')) {
iDocument.field("UpdatedDate", System.currentTimeMillis() / 1000l);
return ORecordHook.RESULT.RECORD_CHANGED;
} else {
return ORecordHook.RESULT.RECORD_NOT_CHANGED;
}
}
}
Powyższy kod wyszukuje każdą klasę zaczynającą się od liter „r'lub't'i ustawia CreatedDate i UpdatedDate, gdy rekord zostanie utworzony, i ustawia tylko UpdatedDate za każdym razem, gdy rekord zostanie zaktualizowany.
Kompiluj Java hooki
Skompiluj kod Java za pomocą następującego polecenia. Note: Zachowaj pobrany plik jar i te pliki Java w tym samym folderze.
$ jar cf hooks-1.0-SNAPSHOT.jar *.java
Przenieś skompilowany kod do miejsca, w którym może go znaleźć serwer OrientDB
Musisz skopiować gotowy plik .jar do katalogu, w którym serwer OrientDB będzie ich szukał. Oznacza to „./lib'folder w katalogu głównym serwera OrientDB będzie wyglądał następująco -
$ cp hooks-1.0-SNAPSHOT.jar "$ORIENTDB_HOME/lib"
Włącz Test Hook w pliku konfiguracyjnym serwera OrientDB
Edytować $ORIENTDB_HOME/config/orientdb-server-config.xml i dodaj następującą sekcję pod koniec pliku.
<hooks>
<hook class = "HookTest" position = "REGULAR"/>
</hooks>
...
</orient-server>
Zrestartuj serwer OrientDB
Po ponownym uruchomieniu OrientDB Server, hak zdefiniowany w orientdb-server-config.xmljest teraz aktywny. Uruchom konsolę OrientDB, podłącz ją do bazy danych i uruchom następujące polecenie -
INSERT INTO V SET ID = 1;
Jeśli to polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Ran create hook
Teraz uruchom następujące polecenie -
UPDATE V SET ID = 2 WHERE ID = 1;
Jeśli to polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Ran update hook
Włącz Real Hook w pliku konfiguracyjnym serwera OrientDB
Edytować $ORIENTDB_HOME/config/orientdb-server-config.xml i zmień sekcję haczyków w następujący sposób -
<hooks>
<hook class="setCreatedUpdatedDates" position="REGULAR"/>
</hooks>
...
</orient-server>
Zrestartuj serwer OrientDB
Utwórz nową klasę zaczynającą się na literę „r'lub't'-
CREATE CLASS tTest EXTENDS V;
Teraz wstaw rekord -
INSERT INTO tTest SET ID = 1
SELECT FROM tTest
Jeśli to polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+-----+------+----+-----------+-----------
# |@RID |@CLASS|ID |CreatedDate|UpdatedDate
----+-----+------+----+-----------+-----------
0 |#19:0|tTest |1 |1427597275 |1427597275
----+-----+------+----+-----------+-----------
Mimo że nie określono wartości do ustawienia CreatedDate i UpdatedDate, OrientDB ustawił te pola automatycznie.
Następnie musisz zaktualizować rekord za pomocą następującego polecenia -
UPDATE tTest SET ID = 2 WHERE ID = 1;
SELECT FROM tTest;
Jeśli to polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
----+-----+------+----+-----------+-----------
# |@RID |@CLASS|ID |CreatedDate|UpdatedDate
----+-----+------+----+-----------+-----------
0 |#19:0|tTest |2 |1427597275 |1427597306
----+-----+------+----+-----------+-----------
Możesz zobaczyć, że OrientDB zmienił UpdatedDate ale pozwolił CreatedDate pozostają bez zmian.
OrientDB Java Hooks może być niezwykle cennym narzędziem pomagającym zautomatyzować pracę, którą w innym przypadku musiałbyś wykonywać w kodzie aplikacji. Ponieważ wielu administratorów baz danych nie zawsze jest ekspertami w dziedzinie języka Java, mamy nadzieję, że informacje zawarte w tym samouczku umożliwią Ci dobry start i sprawią, że poczujesz się komfortowo z technologią, umożliwiając pomyślne tworzenie wyzwalaczy baz danych w razie potrzeby.
Cachingto koncepcja, która stworzy kopię struktury tabeli bazy danych, zapewniając wygodne środowisko dla aplikacji użytkownika. OrientDB ma kilka mechanizmów buforowania na różnych poziomach.
Poniższa ilustracja daje wyobrażenie o tym, czym jest buforowanie.
Na powyższej ilustracji DB1, DB2, DB3 to trzy różne instancje bazy danych używane w aplikacji.
Level-1 pamięć podręczna to plik Local cachektóry przechowuje wszystkie jednostki znane w określonej sesji. Jeśli masz trzy transakcje w tej sesji, będzie ona zawierała wszystkie jednostki używane przez wszystkie trzy transakcje. Ta pamięć podręczna jest czyszczona po zamknięciu sesji lub po wykonaniu metody „wyczyszczenia”. Zmniejsza obciążenie operacji we / wy między aplikacją a bazą danych, co z kolei zwiększa wydajność.
Level-2 pamięć podręczna to plik Real cachektóry działa przy użyciu zewnętrznego dostawcy. Możesz mieć pełną kontrolę nad zawartością pamięci podręcznej, czyli będziesz mógł określić, które wpisy mają zostać usunięte, które powinny być przechowywane dłużej i tak dalej. Jest to pełna współdzielona pamięć podręczna między wieloma wątkami.
Storage model to nic innego jak urządzenie magazynujące, czyli dysk, pamięć lub zdalny serwer.
Jak działa pamięć podręczna w OrientDB?
Buforowanie OrientDB zapewnia różne metodologie w różnych środowiskach. Buforowanie jest używane głównie do szybszych transakcji w bazie danych, skracając czas przetwarzania transakcji i zwiększając wydajność. Poniższe diagramy przepływu pokazują, jak działa buforowanie w trybie lokalnym i trybie klient-serwer.
Tryb lokalny (wbudowana baza danych)
Poniższy diagram przepływu przedstawia, w jaki sposób rekord znajduje się pomiędzy magazynem a używaną aplikacją w trybie lokalnym, tj. Gdy serwer bazy danych znajduje się na hoście lokalnym.
Gdy aplikacja kliencka prosi o rekord, OrientDB sprawdza, czy:
Jeśli transakcja już się rozpoczęła, wyszukuje w transakcji zmienione rekordy i zwraca je, jeśli zostanie znaleziona.
Jeśli lokalna pamięć podręczna jest włączona i zawiera żądany rekord, zwraca go.
Jeśli w tym momencie rekord nie znajduje się w pamięci podręcznej, prosi o to do magazynu (dysk, pamięć).
Tryb serwera klienta (zdalna baza danych)
Poniższy diagram przepływu przedstawia, w jaki sposób rekord znajduje się pomiędzy magazynem a używaną aplikacją w trybie klient-serwer, tj. Gdy serwer bazy danych znajduje się w lokalizacji zdalnej.
Gdy aplikacja kliencka prosi o rekord, OrientDB sprawdza, czy:
Jeśli transakcja już się rozpoczęła, wyszukuje w transakcji zmienione rekordy i zwraca je, jeśli zostanie znaleziona.
Jeśli lokalna pamięć podręczna jest włączona i zawiera żądany rekord, zwraca go.
W tym momencie, jeśli rekord nie znajduje się w pamięci podręcznej, prosi o to serwer za pośrednictwem połączenia TCP / IP.
Na serwerze, jeśli lokalna pamięć podręczna jest włączona i zawiera żądany rekord, zwraca go.
W tym momencie rekord nadal nie jest buforowany na serwerze, a następnie prosi o to do magazynu (dysk, pamięć).
OrientDB używa środowiska Java Logging dołączonego do Java Virtual Machine. Domyślnym formatem dziennika OrientDB zarządzaOLogFormatter klasa.
Poniższa instrukcja przedstawia podstawową składnię polecenia logowania.
<date> <level> <message> [<requester>]
Poniżej znajdują się szczegółowe informacje na temat opcji w powyższej składni.
<date> - Jest to data logowania w następującym formacie: rrrr-MM-dd HH: mm: ss: SSS.
<level> - Jest to poziom logowania 5 znaków na wyjściu.
<message> - Jest to tekst dziennika, może mieć dowolną wielkość.
[<class>] - Jest to klasa Java, która jest rejestrowana (opcjonalnie).
Obsługiwane poziomy to poziomy zawarte w klasie JRE java.util.logging.Level. Oni są -
- POWAŻNE (najwyższa wartość)
- WARNING
- INFO
- CONFIG
- FINE
- FINER
- NAJLEPSZA (najniższa wartość)
Domyślnie zainstalowane są dwa rejestratory -
Console, jako wynik powłoki / wiersza polecenia, który uruchamia aplikację / serwer. Można zmienić, ustawiając zmienną „log.console.level”.
File, jako dane wyjściowe do plików dziennika. Można zmienić, ustawiając „log.file.level”.
Skonfiguruj rejestrowanie
Strategie i zasady rejestrowania można skonfigurować za pomocą pliku zgodnego z językiem Java.
syntax - Konfiguracja logowania Java.
Przykład
Skopiuj następującą zawartość z orientdb-server-log.properties plik i umieść go w $ORIENTDB_HOME/config plik.
# Specify the handlers to create in the root logger
# (all loggers are children of the root logger)
# The following creates two handlers
handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler
# Set the default logging level for the root logger
.level = ALL
# Set the default logging level for new ConsoleHandler instances
java.util.logging.ConsoleHandler.level = INFO
# Set the default formatter for new ConsoleHandler instances
java.util.logging.ConsoleHandler.formatter =
com.orientechnologies.common.log.OLogFormatter
# Set the default logging level for new FileHandler instances
java.util.logging.FileHandler.level = INFO
# Naming style for the output file
java.util.logging.FileHandler.pattern =../log/orient-server.log
# Set the default formatter for new FileHandler instances
java.util.logging.FileHandler.formatter = com.orientechnologies.common.log.OLogFormatter
# Limiting size of output file in bytes:
java.util.logging.FileHandler.limit = 10000000
# Number of output files to cycle through, by appending an
# integer to the base file name:
java.util.logging.FileHandler.count = 10
Aby poinformować maszynę JVM, gdzie znajduje się plik właściwości, należy ustawić opcję „java.util.logging.config.file"do właściwości systemu. Na przykład użyj następującego polecenia -
$ java -Djava.util.logging.config.file=mylog.properties ...
Ustaw poziom rejestrowania
Aby zmienić poziom rejestrowania bez modyfikowania konfiguracji rejestrowania, wystarczy ustawić opcję „log.console.level" i "log.file.level"zmienne systemowe na żądane poziomy.
Rejestrowanie podczas uruchamiania
Poniżej przedstawiono procedury konfigurowania rejestrowania na poziomie uruchamiania na różne sposoby.
W konfiguracji serwera
Otwórz plik orientdb-server-config.xml i dodaj lub zaktualizuj te wiersze na końcu pliku w sekcji <properties> -
<entry value = "fine" name = "log.console.level" />
<entry value = "fine" name = "log.file.level" />
W skrypcie Server.sh (lub .bat)
Ustaw właściwość systemu „log.console.level" i "log.file.level”do żądanych poziomów za pomocą parametru -D java.
$ java -Dlog.console.level = FINE ...
Rejestrowanie w czasie wykonywania
Poniżej przedstawiono procedury konfigurowania rejestrowania na poziomie uruchamiania na różne sposoby.
Używając kodu Java
Zmienną systemową można ustawić podczas uruchamiania za pomocą funkcji API System.setProperty (). Poniższy fragment kodu to składnia służąca do ustawiania poziomu rejestrowania przy użyciu kodu Java.
public void main(String[] args){
System.setProperty("log.console.level", "FINE");
...
}
Na serwerze zdalnym
Wykonaj HTTP POST dla adresu URL: /server/log.<type>/ <level>, gdzie -
- <typ> może być „konsolą” lub „plikiem”
- <level> jest jednym z obsługiwanych poziomów
Przykład
Poniższy przykład używa cURLaby wykonać polecenie HTTP POST na serwerze OrientDB. Użyto użytkownika „root” i hasła serwera, zastąp je własnym hasłem.
Włącz najdokładniejszy poziom śledzenia do konsoli -
curl -u root:root -X POST http://localhost:2480/server/log.console/FINEST
Włącz najdokładniejszy poziom śledzenia do pliku -
curl -u root:root -X POST http://localhost:2480/server/log.file/FINEST
W tym rozdziale można uzyskać ogólne wskazówki dotyczące optymalizacji aplikacji korzystającej z OrientDB. Istnieją trzy sposoby na zwiększenie wydajności dla różnych typów baz danych.
Document Database Performance Tuning - Wykorzystuje technikę, która pomaga uniknąć tworzenia dokumentów dla każdego nowego dokumentu.
Object Database Performance Tuning - Wykorzystuje ogólne techniki w celu poprawy wydajności.
Distributed Configuration Tuning - Wykorzystuje różne metodologie w celu poprawy wydajności w konfiguracji rozproszonej.
Ogólne dostrojenie wydajności można osiągnąć, zmieniając ustawienia pamięci, maszyny JVM i połączenia zdalnego.
Ustawienia pamięci
Istnieją różne strategie dotyczące ustawień pamięci, aby poprawić wydajność.
Serwer i ustawienia wbudowane
Te ustawienia obowiązują zarówno w przypadku komponentu serwera, jak i maszyny JVM, w której aplikacja Java jest uruchamiana przy użyciu bazy danych OrientDB w trybie osadzonym, bezpośrednio przy użyciu plocal.
Najważniejszą rzeczą przy strojeniu jest upewnienie się, że ustawienia pamięci są prawidłowe. To, co może zrobić prawdziwą różnicę, to odpowiednie równoważenie między stertą a pamięcią wirtualną używaną przez mapowanie pamięci, szczególnie w przypadku dużych zestawów danych (GB, TB i więcej), w których struktury pamięci podręcznej pamięci są mniej liczone niż surowe IO.
Na przykład, jeśli możesz przypisać maksymalnie 8 GB do procesu Java, zwykle lepiej jest przypisać małą stertę i duży bufor pamięci podręcznej dysku (pamięć poza stertą).
Wypróbuj następujące polecenie, aby zwiększyć pamięć sterty.
java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...
Plik storage.diskCache.bufferSize ustawienie (ze starym "lokalnym" magazynem to było file.mmap.maxMemory) jest w MB i informuje, ile pamięci użyć dla składnika Disk Cache. Domyślnie jest to 4 GB.
NOTE - Jeśli suma maksymalnej sterty i bufora pamięci podręcznej dysku jest zbyt wysoka, może to spowodować wymianę systemu operacyjnego z ogromnym spowolnieniem.
Ustawienia JVM
Ustawienia maszyny JVM są kodowane w plikach wsadowych server.sh (i server.bat). Możesz je zmienić, aby dostroić maszynę JVM zgodnie z ustawieniami użytkowania i sprzętu. Dodaj następujący wiersz w pliku server.bat.
-server -XX:+PerfDisableSharedMem
To ustawienie wyłącza zapisywanie informacji debugowania na temat maszyny JVM. Jeśli musisz sprofilować maszynę JVM, po prostu usuń to ustawienie.
Połączenia zdalne
Dostęp do bazy danych przy użyciu połączenia zdalnego można zwiększyć na wiele sposobów.
Pobieranie strategii
Podczas pracy ze zdalną bazą danych należy zwrócić uwagę na zastosowaną strategię pobierania. Domyślnie klient OrientDB ładuje tylko rekord zawarty w zestawie wyników. Na przykład, jeśli zapytanie zwróci 100 elementów, ale jeśli przekroczysz te elementy z klienta, klient OrientDB leniwie ładuje elementy z jeszcze jednym wywołaniem sieciowym do serwera dla każdego nieodebranego rekordu.
Pula połączeń sieciowych
Każdy klient domyślnie używa tylko jednego połączenia sieciowego do komunikacji z serwerem. Wiele wątków na tym samym kliencie współużytkuje tę samą pulę połączeń sieciowych.
W przypadku wielu wątków może wystąpić wąskie gardło, ponieważ dużo czasu spędza się na oczekiwaniu na wolne połączenie sieciowe. To jest powód, dla którego ważne jest, aby skonfigurować pulę połączeń sieciowych.
Konfiguracja jest bardzo prosta, tylko 2 parametry -
minPool- Jest to początkowa wielkość puli połączeń. Wartość domyślna jest skonfigurowana jako parametry globalne „client.channel.minPool”.
maxPool- Jest to maksymalny rozmiar, jaki może osiągnąć pula połączeń. Wartość domyślna jest skonfigurowana jako parametry globalne „client.channel.maxPool”.
Jeśli wszystkie połączenia puli są zajęte, wątek klienta będzie czekał na pierwsze wolne połączenie.
Przykładowe polecenie konfiguracji przy użyciu właściwości bazy danych.
database = new ODatabaseDocumentTx("remote:localhost/demo");
database.setProperty("minPool", 2);
database.setProperty("maxPool", 5);
database.open("admin", "admin");
Rozproszone dostrajanie konfiguracji
Istnieje wiele sposobów na poprawę wydajności w konfiguracji rozproszonej.
Użyj transakcji
Nawet jeśli aktualizujesz wykresy, zawsze powinieneś pracować nad transakcjami. OrientDB pozwala na pracę poza nimi. Typowe przypadki to kwerendy tylko do odczytu lub masowe i niespójne operacje mogą zostać przywrócone w przypadku awarii. W przypadku uruchamiania w konfiguracji rozproszonej użycie transakcji pomaga zmniejszyć opóźnienia. Dzieje się tak, ponieważ operacja rozproszona ma miejsce tylko w czasie zatwierdzenia. Dystrybucja jednej dużej operacji jest znacznie wydajniejsza niż przesyłanie małych, wielu operacji ze względu na opóźnienia.
Replikacja a fragmentowanie
Konfiguracja rozproszona OrientDB jest ustawiona na pełną replikację. Posiadanie wielu węzłów z tą samą kopią bazy danych jest ważne dla odczytów skali. W rzeczywistości każdy serwer jest niezależny od wykonywania odczytów i zapytań. Jeśli masz 10 węzłów serwera, przepustowość odczytu wynosi 10x.
W przypadku zapisów jest odwrotnie: posiadanie wielu węzłów z pełną replikacją spowalnia operacje, jeśli replikacja jest synchroniczna. W takim przypadku dzielenie bazy danych na fragmenty w wielu węzłach umożliwia skalowanie zapisów w górę, ponieważ podczas zapisu bierze udział tylko podzbiór węzłów. Co więcej, możesz mieć bazę danych większą niż jeden węzeł serwera HD.
Zwiększ skalę na podstawie zapisów
Jeśli masz powolną sieć i masz synchroniczną (domyślną) replikację, możesz zapłacić koszt opóźnienia. W rzeczywistości, gdy OrientDB działa synchronicznie, czeka przynajmniej nawriteQuorum. Oznacza to, że jeśli writeQuorum wynosi 3, a masz 5 węzłów, węzeł serwera koordynującego (na którym rozpoczyna się operacja rozproszona) musi czekać na odpowiedź z co najmniej 3 węzłów, aby udzielić odpowiedzi klientowi.
Aby zachować spójność, writeQuorum powinno być ustawione na większość. Jeśli masz 5 węzłów, większość to 3. Przy 4 węzłach nadal jest to 3. Ustawienie parametru writeQuorum na 3 zamiast 4 lub 5 pozwala zmniejszyć koszt opóźnienia i nadal zachować spójność.
Asynchroniczna replikacja
Aby przyspieszyć działanie, możesz skonfigurować replikację asynchroniczną, aby usunąć wąskie gardło związane z opóźnieniami. W takim przypadku węzeł serwera koordynującego wykonuje operację lokalnie i udziela odpowiedzi klientowi. Cała replikacja będzie odbywać się w tle. Jeśli kworum nie zostanie osiągnięte, zmiany zostaną cofnięte w sposób przezroczysty.
Zwiększ skalę odczytów
Jeśli już ustawiłeś writeQuorum dla większości węzłów, możesz zostawić readQuorumna 1 (domyślnie). Przyspiesza to wszystkie odczyty.
Podczas aktualizacji musisz wziąć pod uwagę numer wersji i format. Istnieją trzy rodzaje formatów - MAJOR, MINOR, PATCH.
MAJOR wersja zawiera niekompatybilne zmiany API.
MINOR wersja zawiera funkcjonalność w sposób kompatybilny wstecz.
PTCH wersja zawiera poprawki błędów kompatybilne wstecz.
Aby zsynchronizować wersje pomocnicze i główne, może być konieczne wyeksportowanie i zaimportowanie baz danych. Czasami trzeba przeprowadzić migrację bazy danych z LOCAL do PLOCAL i przenieść wykres do RidBag.
Migracja z LOCAL Storage Engine do PLOCAL
Począwszy od wersji 1.5.x OrientDB jest wyposażony w zupełnie nowy mechanizm przechowywania: PLOCAL (Paginated LOCAL). Jest trwały jak LOCAL, ale przechowuje informacje w inny sposób. Poniższe punkty pokazują porównanie między PLOCAL i LOCAL -
W PLOCAL rekordy są przechowywane w plikach klastrów, podczas gdy w przypadku LOCAL zostało podzielone na klaster i segmenty danych.
PLOCAL jest trwalszy niż LOCAL ze względu na tryb dołączania przy zapisie.
PLOCAL ma niewielkie blokady rywalizacji na zapisach, co oznacza większą współbieżność.
PLOCAL nie używa technik mapowania pamięci (MMap), więc zachowanie jest bardziej „przewidywalne”.
Aby przeprowadzić migrację magazynu LOCAL do nowego PLOCAL, musisz wyeksportować i ponownie zaimportować bazę danych, używając PLOCAL jako silnika magazynowania. Oto procedura.
Step 1 - Otwórz nową powłokę (Linux / Mac) lub wiersz polecenia (Windows).
Step 2- Wyeksportuj bazę danych za pomocą konsoli. Postępuj zgodnie z podanym poleceniem, aby wyeksportować demo bazy danych dodemo.json.gzip plik.
$ bin/console.sh (or bin/console.bat under Windows)
orientdb> CONNECT DATABASE local:/temp/demo admin admin
orientdb> EXPORT DATABASE /temp/demo.json.gzip
orientdb> DISCONNECT
Step 3 - Na lokalnym systemie plików utwórz nową bazę danych używając silnika "plocal" -
orientdb> CREATE DATABASE plocal:/temp/newdb admin admin plocal graph
Step 4 - Zaimportuj starą bazę danych do nowej.
orientdb> IMPORT DATABASE /temp/demo.json.gzip -preserveClusterIDs=true
orientdb> QUIT
Jeśli uzyskujesz dostęp do bazy danych w tej samej maszynie JVM, pamiętaj o zmianie adresu URL z „local:” na „plocal:”
Przenieś wykres do RidBag
Począwszy od OrientDB 1.7, RidBag jest domyślną kolekcją zarządzającą relacjami sąsiedztwa na wykresach. Chociaż starsza baza danych zarządzana przez drzewo MVRB jest w pełni kompatybilna, możesz zaktualizować swoją bazę danych do nowszego formatu.
Możesz zaktualizować swój wykres za pomocą konsoli lub za pomocą ORidBagMigration klasa.
Połącz się z bazą danych CONNECT plocal:databases/<graphdb-name>
Uruchom polecenie wykresu aktualizacji
Podobnie jak RDBMS, OrientDB zapewnia również bezpieczeństwo w oparciu o dobrze znane koncepcje, użytkowników i role. Każda baza danych ma swoich własnych użytkowników, a każdy użytkownik ma jedną lub więcej ról. Role to połączenie trybów pracy i zestawu uprawnień.
Użytkownicy
Domyślnie OrientDB obsługuje trzech różnych użytkowników dla całej bazy danych na serwerze -
Admin - Ten użytkownik ma dostęp do wszystkich funkcji w bazie danych bez ograniczeń.
Reader- Ten użytkownik jest użytkownikiem tylko do odczytu. Czytelnik może wysyłać zapytania do dowolnych rekordów w bazie danych, ale nie może ich modyfikować ani usuwać. Nie ma dostępu do informacji wewnętrznych, takich jak użytkownicy i same role.
Writer - Ten użytkownik jest tym samym użytkownikiem, co czytnik użytkownika, ale może również tworzyć, aktualizować i usuwać rekordy.
Praca z użytkownikami
Gdy masz połączenie z bazą danych, możesz wysyłać zapytania do bieżących użytkowników bazy danych przy użyciu SELECT zapytania na OUser klasa.
orientdb> SELECT RID, name, status FROM OUser
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
---+--------+--------+--------
# | @CLASS | name | status
---+--------+--------+--------
0 | null | admin | ACTIVE
1 | null | reader | ACTIVE
2 | null | writer | ACTIVE
---+--------+--------+--------
3 item(s) found. Query executed in 0.005 sec(s).
Tworzenie nowego użytkownika
Aby utworzyć nowego użytkownika, użyj polecenia WSTAW. Pamiętaj, że robiąc to, musisz ustawić status na AKTYWNY i nadać mu ważną rolę.
orientdb> INSERT INTO OUser SET
name = 'jay',
password = 'JaY',
status = 'ACTIVE',
roles = (SELECT FROM ORole WHERE name = 'reader')
Aktualizowanie użytkowników
Nazwę użytkownika można zmienić za pomocą instrukcji UPDATE.
orientdb> UPDATE OUser SET name = 'jay' WHERE name = 'reader'
W ten sam sposób możesz również zmienić hasło użytkownika.
orientdb> UPDATE OUser SET password = 'hello' WHERE name = 'reader'
OrientDB zapisuje hasło w formacie skrótu. SpustOUserTrigger szyfruje hasło w sposób przezroczysty przed zapisaniem rekordu.
Wyłączanie użytkowników
Aby wyłączyć użytkownika, użyj UPDATE, aby zmienić jego stan z ACTIVE na SUSPENDED. Na przykład, jeśli chcesz wyłączyć wszystkich użytkowników oprócz administratora, użyj następującego polecenia -
orientdb> UPDATE OUser SET status = 'SUSPENDED' WHERE name <> 'admin'
Role
Rola określa, jakie operacje użytkownik może wykonać na zasobie. Przede wszystkim decyzja ta zależy od trybu pracy i zasad. Same zasady działają inaczej, w zależności od trybu pracy.
Praca z rolami
Gdy masz połączenie z bazą danych, możesz wysyłać zapytania o bieżące role w bazie danych za pomocą SELECT zapytania na ORole klasa.
orientdb> SELECT RID, mode, name, rules FROM ORole
Jeśli powyższe zapytanie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
--+------+----+--------+-------------------------------------------------------
# |@CLASS|mode| name | rules
--+------+----+--------+-------------------------------------------------------
0 | null | 1 | admin | {database.bypassRestricted = 15}
1 | null | 0 | reader | {database.cluster.internal = 2, database.cluster.orole = 0...
2 | null | 0 | writer | {database.cluster.internal = 2, database.cluster.orole = 0...
--+------+----+--------+-------------------------------------------------------
3 item(s) found. Query executed in 0.002 sec(s).
Tworzenie nowych ról
Aby utworzyć nową rolę, użyj instrukcji INSERT.
orientdb> INSERT INTO ORole SET name = 'developer', mode = 0
Praca z trybami
Tam, gdzie reguły określają, co użytkownicy należący do określonych ról mogą robić w bazach danych, tryby pracy określają, jak OrientDB interpretuje te reguły. Istnieją dwa rodzaje trybów pracy, oznaczone 1 i 0.
Allow All But (Rules)- Domyślnie jest to tryb superużytkownika. Określ wyjątki od tej reguły za pomocą reguł. Jeśli OrientDB nie znajdzie żadnych reguł dla żądanego zasobu, wówczas umożliwia użytkownikowi wykonanie operacji. Używaj tego trybu głównie dla zaawansowanych użytkowników i administratorów. Domyślny administrator roli domyślnie korzysta z tego trybu i nie ma żadnych reguł dotyczących wyjątków. W bazie danych jest zapisane jako 1.
Deny All But (Rules)- Domyślnie ten tryb nie pozwala na nic. Określ wyjątki od tej reguły za pomocą reguł. Jeśli OrientDB znajdzie reguły dla żądanego zasobu, wówczas umożliwia użytkownikowi wykonanie operacji. Użyj tego trybu jako domyślnego dla wszystkich klasycznych użytkowników. Domyślne role, czytający i zapisujący, używają tego trybu. W bazie danych jest zapisane jako 0.
OrientDB udostępnia internetowy interfejs użytkownika do wykonywania operacji na bazie danych za pośrednictwem graficznego interfejsu użytkownika. W tym rozdziale opisano różne opcje dostępne w OrientDB.
Strona główna Studio
Studio to interfejs sieciowy do administrowania OrientDB, który jest dostarczany w pakiecie z dystrybucją OrientDB.
Najpierw musisz uruchomić serwer OrientDB za pomocą następującego polecenia.
$ server.sh
If you run OrientDB in your machine, the web interface can be accessed via the URL −
http://localhost:2480
If the command is executed successfully, following will be the output on screen.
Connect to an Existing Database
To login, select a database from the databases list and use any database user. By default (username/password) reader/reader can read records from the database, writer/writer can read, create, update and delete records, while admin/admin has all rights.
Drop an Existing Database
Select a database from the databases list and click the trash icon. Studio will open a confirmation popup where you have to insert the Server User and Server Password.
Then click the "Drop database" button. You can find the server credentials in the $ORIENTDB_HOME/config/orientdb-server-config.xml file.
<users>
<user name = "root" password = "pwd" resources = "*" />
</users>
Create a New Database
To create a new database, click the "New DB" button from the homepage.
Following information is needed to create a new database −
- Database name
- Database type (Document/Graph)
- Storage type (plocal/memory)
- Server user
- Server password
You can find the server credentials in the $ORIENTDB_HOME/config/orientdbserver-config.xml file.
<users>
<user name = "root" password = "pwd" resources = "*" />
</users>
Once created, Studio will automatically login to the new database.
Wykonaj zapytanie
Studio obsługuje automatyczne rozpoznawanie używanego języka między obsługiwanymi językami: SQL i Gremlin. Podczas pisania użyj funkcji automatycznego uzupełniania, naciskającCtrl + Space.
W edytorze zapytań dostępne są następujące skróty -
Ctrl + Return - Aby wykonać zapytanie lub po prostu kliknij plik Run przycisk.
Ctrl/Cmd + Z - Aby cofnąć zmiany.
Ctrl/Cmd + Shift + Z - Aby powtórzyć zmiany.
Ctrl/Cmd + F - Aby wyszukać w edytorze.
Ctrl/Cmd + / - Aby przełączyć komentarz.
Poniższy zrzut ekranu pokazuje, jak wykonać zapytanie.
Klikając dowolne @rid wartość w zestawie wyników, przejdziesz do trybu edycji dokumentu, jeśli rekord jest dokumentem, w przeciwnym razie przejdziesz do edycji wierzchołków.
Możesz dodać swoje zapytania do zakładek, klikając ikonę gwiazdki w zestawie wyników lub w edytorze. Aby przeglądać zapytania z zakładkami, kliknij plikBookmarksprzycisk. Studio otworzy listę zakładek po lewej stronie, na której możesz edytować / usuwać lub ponownie uruchamiać zapytania.
Studio zapisuje wykonane zapytania w pamięci lokalnej przeglądarki. W ustawieniach zapytań możesz skonfigurować, ile Queries Studio będzie przechowywać w historii. Możesz również przeszukać wcześniej wykonane zapytanie, usunąć wszystkie zapytania z historii lub usunąć pojedyncze zapytanie.
Edytuj wierzchołek
Aby edytować wierzchołek wykresu, przejdź do sekcji Wykres. Następnie uruchom następujące zapytanie.
Select From Customer
Po pomyślnym uruchomieniu zapytania pojawi się zrzut ekranu wyjściowego. Wybierz konkretny wierzchołek na kanwie wykresu do edycji.
Wybierz symbol edycji na określonym wierzchołku. Pojawi się następujący ekran, który zawiera opcje edycji wierzchołka.
Menedżer schematów
OrientDB może pracować w trybie bez schematu, trybie schematu lub w połączeniu obu. Tutaj omówimy tryb schematu. Kliknij sekcję Schemat u góry interfejsu internetowego. Otrzymasz następujący zrzut ekranu.
Utwórz nową klasę
Aby utworzyć nową klasę, po prostu kliknij New Classprzycisk. Pojawi się następujący zrzut ekranu. Będziesz musiał podać następujące informacje, jak pokazano na zrzucie ekranu, aby utworzyć nową klasę.
Wyświetl wszystkie indeksy
Jeśli chcesz mieć przegląd wszystkich indeksów utworzonych w bazie danych, po prostu kliknij przycisk wszystkie indeksy w interfejsie użytkownika schematu. Zapewni to szybki dostęp do niektórych informacji o indeksach (nazwa, typ, właściwości itp.) I można je stąd upuścić lub odbudować.
Edytuj klasę
Kliknij dowolną klasę w sekcji schematu, pojawi się następujący zrzut ekranu.
Podczas edycji zajęć możesz dodać właściwość lub dodać nowy indeks.
Dodaj właściwość
Kliknij przycisk Nowa właściwość, aby dodać właściwość. Otrzymasz następujący zrzut ekranu.
Musisz podać następujące szczegóły, jak pokazano na zrzucie ekranu, aby dodać właściwość.
Dodaj indeks
Kliknij przycisk Nowy indeks. Otrzymasz następujący zrzut ekranu. Musisz podać następujące szczegóły, jak pokazano na zrzucie ekranu, aby dodać indeks.
Edytor wykresów
Kliknij sekcję wykresu. Możesz nie tylko wizualizować swoje dane w formie wykresu, ale także wchodzić w interakcje z wykresem i modyfikować go.
Aby wypełnić obszar wykresu, wpisz zapytanie w edytorze zapytań lub użyj funkcji Wyślij do wykresu w interfejsie przeglądania.
Dodaj wierzchołki
Aby dodać nowy wierzchołek do bazy danych wykresów iw obszarze kanwy wykresów, musisz nacisnąć przycisk Add Vertex. Ta operacja jest wykonywana w dwóch krokach.
W pierwszym kroku musisz wybrać klasę dla nowego wierzchołka, a następnie kliknąć Dalej.
W drugim kroku musisz wstawić wartości pól nowego wierzchołka. Możesz także dodać pola niestandardowe, ponieważ OrientDB obsługuje tryb bez schematu. Aby nowy wierzchołek stał się trwały, kliknij „Zapisz zmiany”, a wierzchołek zostanie zapisany w bazie danych i dodany do obszaru roboczego.
Usuń wierzchołki
Otwórz okrągłe menu, klikając wierzchołek, który chcesz usunąć. Otwórz podmenu, najeżdżając kursorem myszy na pozycję menu więcej (...), a następnie kliknij ikonę kosza.
Usuń wierzchołki z płótna
Otwórz okrągłe menu, otwórz podmenu, najeżdżając myszą na pozycję menu więcej (...), a następnie kliknij ikonę gumki.
Sprawdź wierzchołki
Jeśli chcesz szybko rzucić okiem na właściwość Vertex, kliknij ikonę oka.
Bezpieczeństwo
Studio 2.0 zawiera nowe zarządzanie bezpieczeństwem, w którym można zarządzać użytkownikami i rolami w sposób graficzny.
Użytkownicy
Aby zarządzać użytkownikami bazy danych, możesz wykonać następujące czynności -
- Wyszukaj użytkowników
- Dodaj użytkowników
- Usuń użytkowników
- Edytuj użytkownika: role można edytować bezpośrednio, aby uzyskać nazwę, status i hasło, kliknij Edit przycisk
Dodaj użytkowników
Aby dodać nowego użytkownika, kliknij Add User uzupełnij informacje dla nowego użytkownika (nazwa, hasło, status, role), a następnie zapisz, aby dodać nowego użytkownika do bazy danych.
Role
Aby zarządzać rolami bazy danych, możesz wykonać następujące czynności -
- Wyszukaj rolę
- Dodaj rolę
- Usuń rolę
- Edytuj rolę
Dodaj rolę
Aby dodać nowego użytkownika, kliknij Add Role uzupełnij informacje dotyczące nowej roli (nazwa, rola nadrzędna, tryb), a następnie zapisz, aby dodać nową rolę do bazy danych.
Dodaj regułę do roli
Aby dodać nową regułę bezpieczeństwa dla wybranej roli, kliknij Add Ruleprzycisk. Spowoduje to wyświetlenie ciągu zasobu, który chcesz zabezpieczyć. Następnie możesz skonfigurować uprawnienia CRUD do nowo utworzonego zasobu.
Podobnie jak RDBMS, OrientDB obsługuje JDBC. W tym celu najpierw musimy skonfigurować środowisko do programowania JDBC. Poniżej przedstawiono procedurę tworzenia połączenia między aplikacją a bazą danych.
Najpierw musimy pobrać sterownik JDBC. Odwiedź poniższy linkhttps://code.google.com/archive/p/orient/downloads aby pobrać OrientDB-JDBC.
Poniżej przedstawiono pięć podstawowych kroków do osiągnięcia łączności OrientDB-jdbc.
- Załaduj sterownik JDBC
- Utwórz połączenie
- Utwórz oświadczenie
- Wykonaj instrukcję
- Zamknij połączenie
Przykład
Wypróbuj poniższy przykład, aby zrozumieć łączność OrientDB-JDBC. Rozważmy, że mamy tabelę pracowników, która zawiera następujące pola i ich typy.
Sr.No. | Nazwa pola | Rodzaj |
---|---|---|
1 | ID | Liczba całkowita |
2 | Nazwa | Strunowy |
3 | Wynagrodzenie | Liczba całkowita |
4 | Data dołączenia | Data |
Możesz utworzyć schemat (tabelę), wykonując następujące polecenia.
CREATE DATABASE PLOCAL:/opt/orientdb/databases/testdb
CREATE CLASS Employee
CREATE PROPERTY Customer.id integer
CREATE PROPERTY Customer.name String
CREATE PROPERTY Customer.salary integer
CREATE PROPERTY Customer.join_date date
Po wykonaniu wszystkich poleceń otrzymasz tabelę Employee z następującymi polami, nazwiskiem pracownika z identyfikatorem, wiekiem i polami join_date.
Zapisz następujący kod w OrientJdbcDemo.java plik.
import com.orientechnologies.common.log.OLogManager;
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import java.io.File;
import java.sql.DriverManager;
import java.util.Properties;
import static com.orientechnologies.orient.jdbc.OrientDbCreationHelper.createSchemaDB;
import static com.orientechnologies.orient.jdbc.OrientDbCreationHelper.loadDB;
import static java.lang.Class.forName;
public abstract class OrientJdbcDemo {
protected OrientJdbcConnection conn;
public static void main(String ar[]){
//load Driver
forName(OrientJdbcDriver.class.getName());
String dbUrl = "memory:testdb";
ODatabaseDocumentTx db = new ODatabaseDocumentTx(dbUrl);
String username = "admin";
String password = "admin";
createSchemaDB(db);
loadDB(db, 20);
dbtx.create();
//Create Connection
Properties info = new Properties();
info.put("user", username);
info.put("password", password);
conn = (OrientJdbcConnection) DriverManager.getConnection("jdbc:orient:" + dbUrl, info);
//create and execute statement
Statement stmt = conn.createStatement();
int updated = stmt.executeUpdate("INSERT into emplyoee
(intKey, text, salary, date) values ('001','satish','25000','"
+ date.toString() + "')");
int updated = stmt.executeUpdate("INSERT into emplyoee
(intKey, text, salary, date) values ('002','krishna','25000','"
+ date.toString() + "')");
System.out.println("Records successfully inserted");
//Close Connection
if (conn != null && !conn.isClosed())
conn.close();
}
}
Poniższe polecenie służy do kompilacji powyższego programu.
$ javac –classpath:.:orientdb-jdbc-1.0-SNAPSHOT.jar OrientJdbcDemo.java $ java –classpath:.:orientdb-jdbc-1.0-SNAPSHOT.jar OrientJdbcDemo
Jeśli powyższe polecenie zostanie wykonane pomyślnie, otrzymasz następujące dane wyjściowe.
Records Successfully Inserted
Sterownik OrientDB dla Pythona korzysta z protokołu binarnego. PyOrient to nazwa projektu git hub, która pomaga połączyć OrientDB z Pythonem. Działa z OrientDB w wersji 1.7 i nowszych.
Poniższe polecenie służy do instalacji PyOrient.
pip install pyorient
Możesz użyć pliku skryptu o nazwie demo.py wykonać następujące zadania -
Utworzenie instancji klienta oznacza utworzenie połączenia.
Utwórz bazę danych o nazwie DB_Demo.
Otwórz bazę danych o nazwie DB_Demo.
Utwórz klasę my_class.
Utwórz identyfikator i nazwę właściwości.
Wstaw rekord do mojej klasy.
//create connection
client = pyorient.OrientDB("localhost", 2424)
session_id = client.connect( "admin", "admin" )
//create a databse
client.db_create( db_name, pyorient.DB_TYPE_GRAPH, pyorient.STORAGE_TYPE_MEMORY )
//open databse
client.db_open( DB_Demo, "admin", "admin" )
//create class
cluster_id = client.command( "create class my_class extends V" )
//create property
cluster_id = client.command( "create property my_class.id Integer" )
cluster_id = client.command( "create property my_class.name String" )
//insert record
client.command("insert into my_class ( 'id','’name' ) values( 1201, 'satish')")
Wykonaj powyższy skrypt za pomocą następującego polecenia.
$ python demo.py