แทรกรายการ
ในส่วนนี้จะอธิบายถึงวิธีการแทรกข้อมูลเข้าสู่ Milvus ผ่านทางฝั่งไคลเอ็นต์
คุณยังสามารถใช้ MilvusDM เพื่อโอนย้ายข้อมูลไปยัง Milvus โดย MilvusDM เป็นเครื่องมือโอเพนซอร์สที่ออกแบบมาเฉพาะสำหรับนำเข้าและส่งออกข้อมูล Milvus
Milvus 2.1 รองรับชนิดข้อมูล VARCHAR
บนฟิลด์สเกาลาร์ (scalar fields) โดยเมื่อสร้างดัชนีสำหรับฟิลด์สเกาลาร์ชนิด VARCHAR ดัชนีปริยายที่ใช้คือ trie
ตัวอย่างต่อไปนี้แทรกรายการข้อมูลตัวอย่าง (ตัวอย่างคำสั่ง CLI ของ Milvus ใช้ไฟล์ CSV ระยะไกลที่สร้างไว้ล่วงหน้าที่มีข้อมูลที่คล้ายกัน) แอปพลิเคชันในโลกจริงมักใช้เวกเตอร์ที่มีมิติสูงกว่าตัวอย่าง คุณสามารถเตรียมข้อมูลของคุณเองเพื่อแทนที่ข้อมูลตัวอย่าง
การเตรียมข้อมูล
เริ่มต้นด้วยการเตรียมข้อมูลที่ต้องการแทรก เช่น ชนิดข้อมูลที่ต้องการแทรกต้องตรงกับสกีม่า (schema) ของคอลเลกชัน มิลวุสรอเปิร์ตการค่าเริ่มต้นสำหรับฟิลด์สเกาลาร์ ยกเว้นสำหรับฟิลด์กุญแจหลัก นี้หมายความว่าในระหว่างการแทรกข้อมูลหรือปรับปรุงข้อมูล บางฟิลด์สามารถปล่อยว่างไว้ สำหรับข้อมูลเพิ่มเติม ๆ ดูที่ การสร้างคอลเลกชัน
หลังจากเปิดใช้งานสกีม่าแบบไดนามิก คุณสามารถเชื่อมเข้าฟิลด์ไดนามิกกับข้อมูลสำหรับข้อมูลที่มีรายละเอียดดูที่ สก่อม่าไดนามิก
import random
data = [
[i for i in range(2000)],
[str(i) for i in range(2000)],
[i for i in range(10000, 12000)],
[[random.random() for _ in range(2)] for _ in range(2000)],
[],
None,
]
data.append([str("dy"*i) for i in range(2000)])
การแทรกรายการข้อมูลเข้าสู่ Milvus
แทรกรายการข้อมูลลงในคอลเลกชัน
โดยการระบุ partition_name
คุณสามารถเลือกว่าจะแทรกรายการข้อมูลเข้าไปในพาร์ทิชันใด
from pymilvus import Collection
collection = Collection("book") # ได้คอลเลกชันที่มีอยู่
mr = collection.insert(data)
พารามิเตอร์ | คำอธิบาย |
---|---|
data |
ข้อมูลที่จะแทรกเข้า Milvus |
partition_name (ไม่จำเป็น) |
ชื่อของพาร์ทิชันที่ข้อมูลจะถูกแทรกเข้าไป |
หลังจากที่แทรกรายการข้อมูลเข้าไปในคอลเลกชันที่มีดัชนีไว้ก่อนหน้า ไม่จำเป็นต้องสร้างดัชนีใหม่สำหรับข้อมูลที่แทรกรายการนี้ Milvus จะสร้างดัชนีโดยอัตโนมัติสำหรับข้อมูลที่แทรกเข้ามาใหม่ ดูข้อมูลเพิ่มเติมที่ สามารถสร้างดัชนีหลังจากแทรกรเคเตอร์ได้หรือไม่
การรีเฟรชข้อมูลใน Milvus
เมื่อข้อมูลถูกแทรกเข้า Milvus มันจะถูกแทรกเข้าเซ็กเม้นต์ ครึ่งจึงต้องมีขนาดที่แน่นอนเพื่อถูกปิดกั้นและทำดัชนี เซ็กเม้นต์ที่ยังไม่ถูกปิดกั้นจะใช้วิธีค้นหาแบบบรูทฟอร์ซ หากต้องการหลีกเลี่ยงสถานการณ์นี้ ควรเรียกใช้ flush()
สำหรับข้อมูลที่เหลือ การเรียกใช้ flush()
จะปิดกั้นเซ็กเม้นต์ที่เหลือและส่งขึ้นดัชนี สิ่งสำคัญคือต้องเรียกเมธอดนี้เท่านั้นเมื่อเสร็จสิ้นการแทรกข้อมูล การเรียกใช้บ่อยเกินไปอาจทำให้ข้อมูลแตกแยกซึ่งต้องทำความสะอาดในภายหลัง
ข้อ จำกัด
คุณสมบัติ | ข้อ จำกัดสูงสุด |
---|---|
มิติเวกเตอร์ | 32,768 |
อัปเซิร์ต Entity
การอัปเซิร์ตอัปเดตเป็นการผสานการดำเนินการแทรกและลบ เรียกว่าอัปเซิร์ตอัปเดตคือการดำเนินการระดับข้อมูล ในบริบทของฐานข้อมูลเวกเตอร์ Milvus การอัปเดตเป็นการดำเนินการระดับข้อมูล มันจะเขียนทับตัวเองหากฟิลด์ที่ระบุมีอยู่ในคอลเลกชัน และแทรกเอนทิตีใหม่หากค่าที่ระบุไม่มีอยู่
ตัวอย่างต่อไปนี้ทำการอัปเดต รายการข้อมูลที่สร้างอยู่แบบสุ่ม 3,000 แถว เมื่อดำเนินการอัปเดต จำเป็นต้องระวางว่าการดำเนินการนี้อาจมีผลต่อประสิทธิภาพเนื่องจากมีการลบข้อมูล
เตรียมข้อมูล
เริ่มต้นด้วยการเตรียมข้อมูลที่จะอัปเดต ชนิดข้อมูลที่จะอัปเดตต้องตรงกับสกีม่าของคอลเลกชัน มิลวัสรองรับค่าเริ่มต้นสำหรับฟิลด์สเกาลาร์ ยกเว้นสำหรับฟิลด์กุญแจหลัก นี้หมายความว่าในระหว่างการแทรกข้อมูลหรือปรับปรุงข้อมูล บางฟิลด์สามารถปล่อยว่างไว้ สำหรับข้อมูลเพิ่มเติม ๆ ดูที่ การสร้างคอลเลกชัน
import random
nb = 3000
dim = 8
vectors = [[random.random() for _ in range(dim)] for _ in range(nb)]
data = [
[i for i in range(nb)],
[str(i) for i in range(nb)],
[i for i in range(10000, 10000+nb)],
vectors,
[str("dy"*i) for i in range(nb)]
]
อัปเดตข้อมูล
อัปเดตข้อมูลเข้าคอลเลกชัน
from pymilvus import Collection
collection = Collection("book") # Get the existing collection.
mr = collection.upsert(data)
ลบ Entity
Milvus รองรับการลบเอนทิตีโดยใช้สูตรตรรกะผ่าน primary keys.
เตรียมสมการบูลีน
เตรียมสมการบูลีนเพื่อกรององค์ประกอบที่ต้องการลบ
Milvus รองรับการลบองค์ประกอบที่มี primary key ที่ระบุโดยชัดเจนเท่านั้น ซึ่งสามารถทำได้โดยใช้ตัวดำเนินการ "in" ตัวดำเนินการอื่น ๆ สามารถใช้ได้เฉพาะในการกรองแบบ scalar สำหรับการคิวรี่หรือค้นหาเวกเตอร์เท่านั้น
ตัวอย่างต่อไปนี้กรองข้อมูลโดยใช้ค่า primary key ของ 0 และ 1
expr = "book_id in [0,1]"
เหมือนกับคำสั่ง WHERE clause ใน SQL
ลบองค์ประกอบ
ใช้สมการบูลีนที่คุณสร้างเพื่อลบองค์ประกอบ Milvus จะส่งคืนรายการของ ID ขององค์ประกอบที่ถูกลบ
from pymilvus import Collection
collection = Collection("book") # รับองค์ประกอบที่มีอยู่
collection.delete(expr)
บีบองค์ประกอบข้อมูล
Milvus รองรับการบีบองค์ประกอบข้อมูลโดยอัตโนมัติที่เป็นค่าเริ่มต้น คุณสามารถกำหนด Milvus เพื่อเปิดหรือปิดการบีบองค์ประกอบและบีบอัตโนมัติได้
หากการบีบองค์ประกอบอัตโนมัติถูกปิด คุณยังสามารถบีบอันดั้นข้อมูลด้วยตนเอง
บีบอัตโนมัติข้อมูลด้วยตนเอง
เนื่องจากการบีบองค์ประกอบมักใช้เวลานาน คำขอการบีบองค์ประกอบจะถูกประมวลผลโดยไม่ระบุ
from pymilvus import Collection
collection = Collection("book") # รับองค์ประกอบที่มีอยู่
collection.compact()
ตรวจสอบสถานะการบีบองค์ประกอบ
คุณสามารถใช้ ID การบีบองค์ประกอบที่ส่งคืนเมื่อเริ่มการบีบองค์ประกอบเพื่อตรวจสอบสถานะการบีบองค์ประกอบ
collection.get_compaction_state()