Basis Data
Milvus memperkenalkan lapisan basis data di atas koleksi, menyediakan cara yang lebih efisien untuk mengelola dan mengatur data Anda sekaligus mendukung multi-tenancy.
Apa yang dimaksud dengan basis data
Di Milvus, basis data berfungsi sebagai unit logis untuk mengatur dan mengelola data. Untuk meningkatkan keamanan data dan mencapai multi-penyewaan, Anda bisa membuat beberapa basis data untuk mengisolasi data secara logis untuk aplikasi atau penyewa yang berbeda. Misalnya, Anda membuat basis data untuk menyimpan data pengguna A dan basis data lain untuk pengguna B.
Membuat basis data
Anda dapat menggunakan Milvus RESTful API atau SDK untuk membuat data secara terprogram.
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"
}'
Anda juga dapat mengatur properti untuk basis data ketika Anda membuatnya. Contoh berikut ini mengatur jumlah replika basis data.
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
}
}'
Melihat basis data
Anda dapat menggunakan Milvus RESTful API atau SDK untuk membuat daftar semua basis data yang ada dan melihat detailnya.
# 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"
}'
Mengelola properti basis data
Setiap basis data memiliki propertinya sendiri, Anda dapat mengatur properti basis data ketika Anda membuat basis data seperti yang dijelaskan di Membuat basis data atau Anda dapat mengubah dan melepas properti dari basis data yang ada.
Tabel berikut mencantumkan properti database yang mungkin.
Nama Properti |
Jenis |
Deskripsi Properti |
|---|---|---|
|
integer |
Jumlah replika untuk basis data yang ditentukan. |
|
string |
Nama-nama grup sumber daya yang terkait dengan database yang ditentukan dalam daftar yang dipisahkan dengan koma. |
|
integer |
Ukuran maksimum ruang disk untuk basis data yang ditentukan, dalam megabyte (MB). |
|
integer |
Jumlah maksimum koleksi yang diperbolehkan dalam database yang ditentukan. |
|
boolean |
Apakah akan memaksa basis data yang ditentukan untuk menolak operasi penulisan. |
|
boolean |
Apakah akan memaksa basis data yang ditentukan untuk menolak operasi pembacaan. |
|
string |
Menentukan zona waktu default yang diterapkan pada operasi yang peka terhadap waktu di dalam basis data, khususnya untuk bidang |
Mengubah properti basis data
Anda dapat mengubah properti basis data yang sudah ada sebagai berikut. Contoh berikut ini membatasi jumlah koleksi yang dapat Anda buat di dalam basis data.
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
}
}'
Menghapus properti basis data
Anda juga dapat mengatur ulang properti basis data dengan menjatuhkannya sebagai berikut. Contoh berikut ini menghapus batasan jumlah koleksi yang dapat Anda buat di dalam basis data.
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"
]
}'
Menggunakan basis data
Anda dapat beralih dari satu basis data ke basis data lainnya tanpa memutuskan sambungan dari Milvus.
RESTful API tidak mendukung operasi ini.
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.
Hapus basis data
Ketika sebuah basis data sudah tidak diperlukan lagi, Anda dapat menghapus basis data tersebut. Perhatikan bahwa:
Basis data bawaan tidak dapat dihapus.
Sebelum menghapus basis data, Anda perlu menghapus semua koleksi dalam basis data terlebih dahulu.
Anda dapat menggunakan Milvus RESTful API atau SDK untuk membuat data secara terprogram.
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"
}'
PERTANYAAN UMUM
Bagaimana cara mengelola izin untuk basis data?
Milvus menggunakan Role-Based Access Control (RBAC) untuk mengelola izin. Anda dapat membuat peran dengan hak istimewa tertentu dan memberikannya kepada pengguna, sehingga mengontrol akses mereka ke database yang berbeda. Untuk lebih jelasnya, lihat dokumentasi RBAC.
Apakah ada batasan kuota untuk database?
Ya, Milvus memungkinkan Anda untuk mengatur batasan kuota untuk database, seperti jumlah maksimum koleksi. Untuk daftar lengkap batasan, silakan lihat dokumentasi Batasan Milvus.