• Über Milvus
  • Los geht's
  • Konzepte
  • Benutzerhandbuch
    • Sammlungen
    • Schema & Datenfelder
    • Einfügen & Löschen
    • Indizes
    • Suche
    • Einbettungen & Reranking
    • Optimierung der Speicherung
  • Datenimport
  • AI-Tools
  • Leitfaden für die Verwaltung
  • Werkzeuge
  • Integrationen
  • Anleitungen
  • FAQs
  • API Reference

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

database.replica.number

Ganzzahl

Die Anzahl der Replikate für die angegebene Datenbank.

database.resource_groups

string

Die Namen der Ressourcengruppen, die mit der angegebenen Datenbank verbunden sind, in einer durch Kommata getrennten Liste.

database.diskQuota.mb

Ganzzahl

Die maximale Größe des Speicherplatzes für die angegebene Datenbank in Megabyte (MB).

database.max.collections

Ganzzahl

Die maximal zulässige Anzahl von Sammlungen in der angegebenen Datenbank.

database.force.deny.writing

boolesch

Ob die angegebene Datenbank gezwungen werden soll, Schreibvorgänge zu verweigern.

database.force.deny.reading

boolean

Ob die angegebene Datenbank gezwungen werden soll, Lesevorgänge zu verweigern.

timezone

Zeichenfolge

Gibt die Standardzeitzone an, die für zeitabhängige Vorgänge in der Datenbank gilt, insbesondere für TIMESTAMPTZ Felder. Sammlungen erben die Zeitzone der Datenbank, es sei denn, eine Zeitzone auf Sammlungsebene ist festgelegt. Ein Zeitzonen-Parameter auf Abfrageebene kann vorübergehend sowohl die Datenbank- als auch die Sammlungsvorgaben außer Kraft setzen. Der Wert muss eine gültige IANA-Zeitzonenkennung sein (z. B. Asien/Shanghai, Amerika/Chicago oder UTC). Einzelheiten zur Verwendung eines TIMESTAMPTZ Feldes finden Sie unter TIMESTAMPTZ Feld.

Ä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.