يدعم Milvus عمليات استيراد ملفات Apache Parquet لتحسين كفاءة معالجة البيانات
تخطوMilvus، قاعدة البيانات المتجهة القابلة للتطوير بدرجة كبيرة والمعروفة بقدرتها على التعامل مع مجموعات البيانات الضخمة، خطوة كبيرة إلى الأمام من خلال تقديم دعم ملف Parquet في الإصدار 2.3.4. من خلال تبني Apache Parquet، يمكن للمستخدمين تبسيط عمليات استيراد البيانات والاستمتاع بتوفير كبير في تكاليف التخزين والحساب.
في آخر منشور لنا، نستكشف مزايا الباركيه والفوائد التي يجلبها لمستخدمي ميلفوس. كما نناقش الدافع وراء دمج هذه الميزة ونقدم دليلًا تفصيليًا حول استيراد ملفات الباركيه بسلاسة إلى ميلفوس، مما يفتح إمكانيات جديدة لإدارة البيانات وتحليلها بكفاءة.
ما هو أباتشي باركيه؟
Apache Parquet هو تنسيق ملف بيانات شائع مفتوح المصدر موجه نحو الأعمدة مصمم لتعزيز كفاءة تخزين ومعالجة مجموعات البيانات واسعة النطاق. على النقيض من تنسيقات البيانات التقليدية الموجهة نحو الصفوف مثل CSV أو JSON، يخزن Parquet البيانات حسب العمود، مما يوفر أنظمة ضغط وترميز أكثر كفاءة للبيانات. يُترجم هذا النهج إلى تحسين الأداء، وتقليل متطلبات التخزين، وتعزيز قوة المعالجة، مما يجعله مثاليًا للتعامل مع البيانات المعقدة بكميات كبيرة.
كيف يستفيد مستخدمو Milvus من دعم واردات ملفات الباركيه
يوسع Milvus الدعم لعمليات استيراد الملفات الباركيه، مما يوفر للمستخدمين تجارب محسّنة ومزايا متنوعة، بما في ذلك خفض نفقات التخزين والحساب، وإدارة البيانات بشكل مبسّط، وعملية استيراد مبسّطة.
كفاءة تخزين محسّنة وإدارة بيانات مبسّطة
يوفر Parquet خيارات ضغط مرنة ومخططات ترميز فعالة تلبي احتياجات أنواع البيانات المختلفة، مما يضمن كفاءة التخزين المثلى. تُعد هذه المرونة ذات قيمة خاصة في البيئات السحابية حيث يرتبط كل أونصة من التوفير في التخزين مباشرةً بتخفيضات ملموسة في التكلفة. وبفضل هذه الميزة الجديدة في Milvus، يمكن للمستخدمين دمج جميع بياناتهم المتنوعة في ملف واحد دون عناء، مما يسهل إدارة البيانات ويعزز تجربة المستخدم بشكل عام. هذه الميزة مفيدة بشكل خاص للمستخدمين الذين يعملون مع أنواع بيانات المصفوفات متغيرة الطول، والذين يمكنهم الآن الاستمتاع بعملية استيراد بيانات مبسطة.
تحسين أداء الاستعلام
يعمل تصميم التخزين العمودي وطرق الضغط المتقدمة في Parquet على تحسين أداء الاستعلام بشكل كبير. عند إجراء الاستعلامات، يمكن للمستخدمين التركيز فقط على البيانات ذات الصلة دون مسح البيانات غير ذات الصلة. تقلل هذه القراءة الانتقائية للأعمدة من استخدام وحدة المعالجة المركزية، مما يؤدي إلى تسريع أوقات الاستعلام.
توافق واسع مع اللغات
يتوفر الباركيه بلغات متعددة مثل Java و C++ C و Python وهو متوافق مع عدد كبير من أدوات معالجة البيانات. مع دعم ملفات الباركيه، يمكن لمستخدمي Milvus الذين يستخدمون حزم SDK مختلفة إنشاء ملفات الباركيه بسلاسة لتحليلها داخل قاعدة البيانات.
كيفية استيراد ملفات الباركيه إلى ميلفوس
إذا كانت بياناتك بتنسيق ملف باركيه بالفعل، فإن الاستيراد سهل. قم بتحميل ملف الباركيه إلى نظام تخزين كائنات مثل MinIO، وستكون جاهزًا للاستيراد.
مقتطف الشيفرة أدناه هو مثال على استيراد ملفات الباركيه إلى ميلفوس.
remote_files = []
try:
print("Prepare upload files")
minio_client = Minio(endpoint=MINIO_ADDRESS, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY,
secure=False)
found = minio_client.bucket_exists(bucket_name)
if not found:
minio_client.make_bucket(bucket_name)
print("MinIO bucket '{}' doesn't exist".format(bucket_name))
return False, []
# set your remote data path
remote_data_path = "milvus_bulkinsert"
def upload_file(f: str):
file_name = os.path.basename(f)
minio_file_path = os.path.join(remote_data_path, "parquet", file_name)
minio_client.fput_object(bucket_name, minio_file_path, f)
print("Upload file '{}' to '{}'".format(f, minio_file_path))
remote_files.append(minio_file_path)
upload_file(data_file)
except S3Error as e:
print("Failed to connect MinIO server {}, error: {}".format(MINIO_ADDRESS, e))
return False, []
print("Successfully upload files: {}".format(remote_files))
return True, remote_files
إذا كانت بياناتك ليست ملفات باركيه أو تحتوي على حقول ديناميكية، يمكنك الاستفادة من BulkWriter، أداة تحويل تنسيق البيانات الخاصة بنا، لمساعدتك في إنشاء ملفات باركيه. لقد تبنّى BulkWriter الآن الباركيه كتنسيق بيانات الإخراج الافتراضي، مما يضمن تجربة أكثر سهولة للمطورين.
مقتطف الشيفرة أدناه هو مثال على استخدام BulkWriter لتوليد ملفات Parquet.
import numpy as np
import json
from pymilvus import (
RemoteBulkWriter,
BulkFileType,
)
remote_writer = RemoteBulkWriter(
schema=your_collection_schema,
remote_path="your_remote_data_path",
connect_param=RemoteBulkWriter.ConnectParam(
endpoint=YOUR_MINIO_ADDRESS,
access_key=YOUR_MINIO_ACCESS_KEY,
secret_key=YOUR_MINIO_SECRET_KEY,
bucket_name="a-bucket",
),
file_type=BulkFileType.PARQUET,
)
# append your data
batch_count = 10000
for i in range(batch_count):
row = {
"id": i,
"bool": True if i % 5 == 0 else False,
"int8": i % 128,
"int16": i % 1000,
"int32": i % 100000,
"int64": i,
"float": i / 3,
"double": i / 7,
"varchar": f"varchar_{i}",
"json": {"dummy": i, "ok": f"name_{i}"},
"vector": gen_binary_vector() if bin_vec else gen_float_vector(),
f"dynamic_{i}": i,
}
remote_writer.append_row(row)
# append rows by numpy type
for i in range(batch_count):
remote_writer.append_row({
"id": np.int64(i + batch_count),
"bool": True if i % 3 == 0 else False,
"int8": np.int8(i % 128),
"int16": np.int16(i % 1000),
"int32": np.int32(i % 100000),
"int64": np.int64(i),
"float": np.float32(i / 3),
"double": np.float64(i / 7),
"varchar": f"varchar_{i}",
"json": json.dumps({"dummy": i, "ok": f"name_{i}"}),
"vector": gen_binary_vector() if bin_vec else gen_float_vector(),
f"dynamic_{i}": i,
})
print(f"{remote_writer.total_row_count} rows appends")
print(f"{remote_writer.buffer_row_count} rows in buffer not flushed")
print("Generate data files...")
remote_writer.commit()
print(f"Data files have been uploaded: {remote_writer.batch_files}")
remote_files = remote_writer.batch_files
بعد ذلك، يمكنك البدء في استيراد ملفات الباركيه الخاصة بك إلى Milvus.
remote_files = [remote_file_path]
task_id = utility.do_bulk_insert(collection_name=collection_name,
files=remote_files)
task_ids = [task_id]
states = wait_tasks_to_state(task_ids, BulkInsertState.ImportCompleted)
complete_count = 0
for state in states:
if state.state == BulkInsertState.ImportCompleted:
complete_count = complete_count + 1
الآن، يتم دمج بياناتك بسلاسة في Milvus.
ما التالي؟
مع استمرار Milvus في دعم أحجام البيانات المتزايدة باستمرار، ينشأ التحدي في إدارة عمليات الاستيراد الكبيرة، خاصةً عندما تتجاوز ملفات الباركيه 10 جيجابايت. ولمواجهة هذا التحدي، نخطط لفصل بيانات الاستيراد إلى أعمدة قياسية وأخرى متجهة، وإنشاء ملفين باركيه لكل عملية استيراد لتخفيف ضغط الإدخال/الإخراج. بالنسبة لمجموعات البيانات التي تتجاوز عدة مئات من الجيجابايت، نوصي باستيراد البيانات عدة مرات.
- ما هو أباتشي باركيه؟
- كيف يستفيد مستخدمو Milvus من دعم واردات ملفات الباركيه
- كيفية استيراد ملفات الباركيه إلى ميلفوس
- ما التالي؟
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word