• Tentang Milvus
  • Memulai
  • Konsep
  • Panduan Pengguna
    • Koleksi
    • Bidang Skema & Data
    • Menyisipkan & Menghapus
    • Indeks
    • Pencarian
    • Inferensi Fungsi & Model
    • Optimalisasi Penyimpanan
    • Jepretan
  • Impor Data
  • Alat AI
  • Panduan Administrasi
  • Peralatan
  • Integrasi
  • Tutorial
  • Pertanyaan Umum
  • API Reference

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" \
-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" \
-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" \
-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

database.replica.number

integer

Jumlah replika untuk basis data yang ditentukan.

database.resource_groups

string

Nama-nama grup sumber daya yang terkait dengan database yang ditentukan dalam daftar yang dipisahkan dengan koma.

database.diskQuota.mb

integer

Ukuran maksimum ruang disk untuk basis data yang ditentukan, dalam megabyte (MB).

database.max.collections

integer

Jumlah maksimum koleksi yang diperbolehkan dalam database yang ditentukan.

database.force.deny.writing

boolean

Apakah akan memaksa basis data yang ditentukan untuk menolak operasi penulisan.

database.force.deny.reading

boolean

Apakah akan memaksa basis data yang ditentukan untuk menolak operasi pembacaan.

timezone

string

Menentukan zona waktu default yang diterapkan pada operasi yang peka terhadap waktu di dalam basis data, khususnya untuk bidang TIMESTAMPTZ. Koleksi mewarisi zona waktu basis data kecuali zona waktu tingkat koleksi ditetapkan. Parameter zona waktu tingkat kueri dapat mengganti sementara default basis data dan koleksi. Nilainya harus berupa pengenal zona waktu IANA yang valid (misalnya, Asia/Shanghai, Amerika/Chicago, atau UTC). Untuk detail tentang cara menggunakan bidang TIMESTAMPTZ, lihat Bidang TIMESTAMPTZ.

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" \
-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" \
-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" \
-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.