Datenbank
Milvus führt eine Datenbankschicht über den Sammlungen ein, die eine effizientere Art der Verwaltung und Organisation Ihrer Daten ermöglicht und gleichzeitig die Mandantenfähigkeit unterstützt.
Was ist eine Datenbank?
In Milvus dient eine Datenbank als logische Einheit für die Organisation und Verwaltung von Daten. Um die Datensicherheit zu erhöhen und Multi-Tenancy zu erreichen, können Sie mehrere Datenbanken erstellen, um Daten für verschiedene Anwendungen oder Mandanten logisch zu isolieren. Zum Beispiel erstellen Sie eine Datenbank, um die Daten von Benutzer A zu speichern, und eine weitere Datenbank für Benutzer B.
Datenbank erstellen
Sie können die Milvus RESTful API oder SDKs verwenden, um Daten programmatisch zu erstellen.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
client.create_database(
db_name="my_database_1"
)
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.service.database.request.*;
ConnectConfig config = ConnectConfig.builder()
.uri("http://localhost:19530")
.token("root:Milvus")
.build();
MilvusClientV2 client = new MilvusClientV2(config);
CreateDatabaseReq createDatabaseReq = CreateDatabaseReq.builder()
.databaseName("my_database_1")
.build();
client.createDatabase(createDatabaseReq);
import {MilvusClient} from '@zilliz/milvus2-sdk-node';
const client = new MilvusClient({
address: "http://localhost:19530",
token: 'root:Milvus'
});
await client.createDatabase({
db_name: "my_database_1"
});
cli, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: "localhost:19530",
Username: "Milvus",
Password: "root",
})
if err != nil {
// handle err
}
err = cli.CreateDatabase(ctx, milvusclient.NewCreateDatabaseOption("my_database_1"))
if err != nil {
// handle err
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
-d '{
"dbName": "my_database_1"
}'
Sie können auch Eigenschaften für die Datenbank festlegen, wenn Sie sie erstellen. Im folgenden Beispiel wird die Anzahl der Replikate der Datenbank festgelegt.
client.create_database(
db_name="my_database_2",
properties={
"database.replica.number": 3
}
)
Map<String, String> properties = new HashMap<>();
properties.put("database.replica.number", "3");
CreateDatabaseReq createDatabaseReq = CreateDatabaseReq.builder()
.databaseName("my_database_2")
.properties(properties)
.build();
client.createDatabase(createDatabaseReq);
await client.createDatabase({
db_name: "my_database_2",
properties: {
"database.replica.number": 3
}
});
err := cli.CreateDatabase(ctx, milvusclient.NewCreateDatabaseOption("my_database_2").WithProperty("database.replica.number", 3))
if err != nil {
// handle err
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
-d '{
"dbName": "my_database_2",
"properties": {
"database.replica.number": 3
}
}'
Datenbanken anzeigen
Sie können die Milvus RESTful API oder SDKs verwenden, um alle vorhandenen Datenbanken aufzulisten und ihre Details anzuzeigen.
# List all existing databases
client.list_databases()
# Output
# ['default', 'my_database_1', 'my_database_2']
# Check database details
client.describe_database(
db_name="default"
)
# Output
# {"name": "default"}
import io.milvus.v2.service.database.response.*;
ListDatabasesResp listDatabasesResp = client.listDatabases();
DescribeDatabaseResp descDBResp = client.describeDatabase(DescribeDatabaseReq.builder()
.databaseName("default")
.build());
await client.describeDatabase({
db_name: 'default'
});
// List all existing databases
databases, err := cli.ListDatabase(ctx, milvusclient.NewListDatabaseOption())
if err != nil {
// handle err
}
log.Println(databases)
db, err := cli.DescribeDatabase(ctx, milvusclient.NewDescribeDatabaseOption("default"))
if err != nil {
// handle err
}
log.Println(db)
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/describe" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
-d '{
"dbName": "default"
}'
Verwalten von Datenbankeigenschaften
Jede Datenbank hat ihre eigenen Eigenschaften. Sie können die Eigenschaften einer Datenbank festlegen, wenn Sie die Datenbank erstellen, wie in Datenbank erstellen beschrieben, oder Sie können die Eigenschaften einer bestehenden Datenbank ändern und löschen.
In der folgenden Tabelle sind die möglichen Datenbankeigenschaften aufgeführt.
Eigenschaft Name |
Typ |
Eigenschaft Beschreibung |
|---|---|---|
|
Ganzzahl |
Die Anzahl der Replikate für die angegebene Datenbank. |
|
string |
Die Namen der Ressourcengruppen, die mit der angegebenen Datenbank verbunden sind, in einer durch Kommata getrennten Liste. |
|
Ganzzahl |
Die maximale Größe des Speicherplatzes für die angegebene Datenbank in Megabyte (MB). |
|
Ganzzahl |
Die maximal zulässige Anzahl von Sammlungen in der angegebenen Datenbank. |
|
boolesch |
Ob die angegebene Datenbank gezwungen werden soll, Schreibvorgänge zu verweigern. |
|
boolean |
Ob die angegebene Datenbank gezwungen werden soll, Lesevorgänge zu verweigern. |
|
Zeichenfolge |
Gibt die Standardzeitzone an, die für zeitabhängige Vorgänge in der Datenbank gilt, insbesondere für |
Ändern von Datenbankeigenschaften
Sie können die Eigenschaften einer vorhandenen Datenbank wie folgt ändern. Das folgende Beispiel schränkt die Anzahl der Sammlungen ein, die Sie in der Datenbank erstellen können.
client.alter_database_properties(
db_name="my_database_1",
properties={
"database.max.collections": 10
}
)
client.alterDatabaseProperties(AlterDatabasePropertiesReq.builder()
.databaseName("my_database_1")
.property("database.max.collections", "10")
.build());
await milvusClient.alterDatabaseProperties({
db_name: "my_database_1",
properties: {"database.max.collections", "10" },
})
err := cli.AlterDatabaseProperties(ctx, milvusclient.NewAlterDatabasePropertiesOption("my_database_1").
WithProperty("database.max.collections", 1))
if err != nil {
// handle err
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/alter" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
-d '{
"dbName": "my_database",
"properties": {
"database.max.collections": 10
}
}'
Datenbankeigenschaften löschen
Sie können auch eine Datenbankeigenschaft zurücksetzen, indem Sie sie wie folgt löschen. Das folgende Beispiel hebt die Begrenzung der Anzahl der Sammlungen auf, die Sie in der Datenbank erstellen können.
client.drop_database_properties(
db_name="my_database_1",
property_keys=[
"database.max.collections"
]
)
client.dropDatabaseProperties(DropDatabasePropertiesReq.builder()
.databaseName("my_database_1")
.propertyKeys(Collections.singletonList("database.max.collections"))
.build());
await milvusClient.dropDatabaseProperties({
db_name: my_database_1,
properties: ["database.max.collections"],
});
err := cli.DropDatabaseProperties(ctx, milvusclient.NewDropDatabasePropertiesOption("my_database_1", "database.max.collections"))
if err != nil {
// handle err
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/alter" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
-d '{
"dbName": "my_database",
"propertyKeys": [
"database.max.collections"
]
}'
Datenbank verwenden
Sie können von einer Datenbank zu einer anderen wechseln, ohne die Verbindung zu Milvus zu unterbrechen.
Die RESTful API unterstützt diesen Vorgang nicht.
client.use_database(
db_name="my_database_2"
)
client.useDatabase("my_database_2");
await milvusClient.useDatabase({
db_name: "my_database_2",
});
err = cli.UseDatabase(ctx, milvusclient.NewUseDatabaseOption("my_database_2"))
if err != nil {
// handle err
}
# This operation is unsupported because RESTful does not provide a persistent connection.
# As a workaround, initiate the required request again with the target database.
Datenbank löschen
Sobald eine Datenbank nicht mehr benötigt wird, können Sie die Datenbank löschen. Beachten Sie dies:
Standarddatenbanken können nicht gelöscht werden.
Bevor Sie eine Datenbank löschen, müssen Sie zuerst alle Sammlungen in der Datenbank löschen.
Sie können die Milvus RESTful API oder SDKs verwenden, um Daten programmatisch zu erstellen.
client.drop_database(
db_name="my_database_2"
)
client.dropDatabase(DropDatabaseReq.builder()
.databaseName("my_database_2")
.build());
await milvusClient.dropDatabase({
db_name: "my_database_2",
});
err = cli.DropDatabase(ctx, milvusclient.NewDropDatabaseOption("my_database_2"))
if err != nil {
// handle err
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/drop" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
-d '{
"dbName": "my_database"
}'
FAQ
Wie verwalte ich Berechtigungen für eine Datenbank?
Milvus verwendet die rollenbasierte Zugriffskontrolle (RBAC) zur Verwaltung von Berechtigungen. Sie können Rollen mit spezifischen Privilegien erstellen und diese Benutzern zuweisen, um so deren Zugriff auf verschiedene Datenbanken zu kontrollieren. Weitere Einzelheiten finden Sie in der RBAC-Dokumentation.
Gibt es irgendwelche Quotenbeschränkungen für eine Datenbank?
Ja, Milvus ermöglicht es Ihnen, Quotenbeschränkungen für eine Datenbank festzulegen, z. B. die maximale Anzahl von Sammlungen. Eine umfassende Liste der Beschränkungen finden Sie in der Milvus-Limits-Dokumentation.