نشر موصِّل قاعدة بيانات

تحذير: يتم توفير الموصلات المرجعية في Cloud Search "كما هي" كنموذج رمز للاستخدام في إنشاء الموصلات التي تعمل بنفسك. يتطلب نموذج الرمز هذا تخصيصًا كبيرًا واختبارًا قبل استخدامه في بيئات إثبات المبدأ أو الإنتاج. لاستخدام الإنتاج، ننصح بشدة بالحصول على المساعدة من أحد شركائنا في Cloud Search. للحصول على مزيد من المساعدة في العثور على شريك Cloud Search مناسب، يُرجى التواصل مع مدير حسابك في Google.

يمكنك إعداد Google Cloud Search لاكتشاف البيانات وفهرستها من قواعد بيانات مؤسستك باستخدام موصِّل قاعدة بيانات Google Cloud Search.

اعتبارات مهمة

يمكنك تثبيت موصل قاعدة بيانات Cloud Search وتشغيله في أي بيئة يمكن فيها تشغيل تطبيقات Java تقريبًا، ما دام يمكن للموصّل الوصول إلى الإنترنت وقاعدة البيانات.

متطلبات النظام

متطلبات النظام
نظام التشغيل نظاما التشغيل Windows أو Linux
قاعدة بيانات لغة الاستعلامات البنيوية (SQL) أي قاعدة بيانات SQL تحتوي على برنامج تشغيل متوافق مع JDBC 4.0 أو إصدار أحدث، بما في ذلك ما يلي:
  • MS SQL Server (2008 و2012 و2014 و2016)
  • Oracle (11 غرام، 12c)
  • Google Cloud SQL
  • MySQL
البرامج برنامج تشغيل JDBC للموصل لاستخدامه للوصول إلى قاعدة البيانات (يتم تنزيله وتثبيته بشكل منفصل)

نشر الموصِّل

توضّح الخطوات التالية طريقة تثبيت الموصّل وإعداده لفهرسة قواعد البيانات المحدّدة وعرض النتائج لمستخدمي Cloud Search.

المتطلبات الأساسية

قبل نشر موصل قاعدة بيانات Cloud Search، اجمع المعلومات التالية:

الخطوة 1. تنزيل برنامج موصِّل قاعدة البيانات وإنشائه

  1. استنسِخ مستودع الموصِّل من GitHub.
    $ git clone https://github.com/google-cloudsearch/database-connector.git
    $ cd database-connector
  2. اطّلِع على الإصدار المطلوب من الموصِّل:
    $ git checkout tags/v1-0.0.3
  3. صمم أداة الربط.
    $ mvn package
    لتخطّي الاختبارات عند إنشاء الموصِّل، استخدِم mvn package -DskipTests.
  4. انسخ الملف المضغوط للموصِّل إلى دليل التثبيت المحلي وفك ضغطه:
    $ cp target/google-cloudsearch-database-connector-v1-0.0.3.zip installation-dir
    $ cd installation-dir
    $ unzip google-cloudsearch-database-connector-v1-0.0.3.zip
    $ cd google-cloudsearch-database-connector-v1-0.0.3

الخطوة 2. ضبط موصل قاعدة البيانات

  1. أنشئ ملفًا نصيًا وحدِّد اسمه connector-config.properties (الملفّات التلقائية) أو ما شابه. تنصح Google بتسمية ملفات الإعداد بالامتداد .properties أو .config والاحتفاظ بالملف في الدليل نفسه مع الموصِّل. إذا كنت تستخدم اسمًا أو مسارًا مختلفًا، يجب تحديد المسار عند تشغيل الموصِّل.
  2. أضِف معلَمات كأزواج مفتاح/قيمة إلى محتوى الملف. ويجب أن يحدّد ملف الإعداد المعلَمات للوصول إلى مصدر البيانات، والوصول إلى قاعدة البيانات، وعبارة SQL للاجتياز الكامل لقاعدة البيانات، وعنوان حقل المحتوى، وتعريفات الأعمدة. يمكنك أيضًا ضبط سلوك موصِّل آخر باستخدام مَعلمات اختيارية. مثلاً:
    # Required parameters for data source access
    api.sourceId=1234567890abcdef
    api.identitySourceId=0987654321lmnopq
    api.serviceAccountPrivateKeyFile=./PrivateKey.json
    #
    # Required parameters for database access
    db.url=jdbc:mysql://localhost:3306/mysql_test
    db.user=root
    db.password=passw0rd
    #
    # Required full traversal SQL statement parameter
    db.allRecordsSql=select customer_id, first_name, last_name, phone, change_timestamp from address_book
    #
    # Required parameters for column definitions and URL format
    db.allColumns=customer_id, first_name, last_name, phone, change_timestamp
    db.uniqueKeyColumns=customer_id
    url.columns=customer_id
    #
    # Required content field parameter
    contentTemplate.db.title=customer_id
    #
    # Optional parameters to set ACLs to "entire domain" access
    defaultAcl.mode=fallback
    defaultAcl.public=true
    #
    # Optional parameters for schedule traversals
    schedule.traversalIntervalSecs=36000
    schedule.performTraversalOnStart=true
    schedule.incrementalTraversalIntervalSecs=3600
    

    للحصول على أوصاف تفصيلية للمعلَمات الخاصة بقاعدة البيانات، انتقِل إلى مرجع مَعلمات الإعدادات في نهاية هذه المقالة.

    للتعرّف على المَعلمات الشائعة في جميع موصلات Cloud Search، مثل ضبط البيانات الوصفية وتنسيقات التاريخ وخيارات قائمة التحكم بالوصول، انتقِل إلى مَعلمات الموصِّلات التي توفّرها Google.

    إذا أمكن، حدد خصائص كائن المخطط في مَعلمات طلب بحث SQL للاجتياز. يمكنك عادةً إضافة أسماء مستعارة إلى عبارة SQL. على سبيل المثال، إذا كانت لديك قاعدة بيانات أفلام وكان مخطط مصدر البيانات يحتوي على تعريف سمة باسم "ActorName"، يمكن أن تكون عبارة SQL على النحو التالي: SELECT …, last_name AS ActorName, … FROM … .

الخطوة 3. تشغيل موصِّل قاعدة البيانات

يفترض المثال التالي أن المكونات المطلوبة موجودة في الدليل المحلي على نظام Linux.

لتشغيل الموصل من سطر الأوامر، أدخل الأمر التالي:

java \
   -cp "google-cloudsearch-database-connector-v1-0.0.3.jar:mysql-connector-java-5.1.41-bin.jar" \
   com.google.enterprise.cloudsearch.database.DatabaseFullTraversalConnector \
   [-Dconfig=mysql.config]

المكان:

  • google-cloud-search-database-connector-v1-0.0.3.jar هو ملف .jar لموصل قاعدة البيانات
  • mysql-connector-java-5.1.41-bin.jar هو برنامج تشغيل JDBC الذي يتم استخدامه للوصول إلى قاعدة البيانات
  • mysql.config هو ملف إعداد ذو اسم مخصّص. لضمان تعرُّف الموصل على ملف الإعداد، حدِّد مساره في سطر الأوامر. وبخلاف ذلك، يستخدم الموصِّل connector-config.properties في الدليل المحلي كاسم الملف التلقائي.

يبلغ الموصِّل عن أخطاء الضبط عند اكتشافها. يتم الإبلاغ عن بعض الأخطاء عند إعداد الموصِّل، مثلاً عند تحديد عمود قاعدة بيانات كجزء من محتوى السجلّ (في db.allColumns)، ولكن لا يتم استخدام العمود في طلب SQL للاجتياز لقاعدة البيانات (في db.allRecordsSql). ويتم رصد أخطاء أخرى والإبلاغ عنها فقط عندما يحاول الموصل الوصول إلى قاعدة البيانات خلال عملية الاجتياز الأولى، مثل بنية عبارة SQL غير صالحة.

مرجع مَعلمات الإعدادات

مَعلمات الوصول إلى مصدر البيانات

المكان المَعلمة
رقم تعريف مصدر البيانات api.sourceId = source-ID

مطلوبة. رقم تعريف مصدر Cloud Search الذي أعدّه مشرف Google Workspace.

رقم تعريف مصدر الهوية api.identitySourceId = identity-source-ID

مطلوب لاستخدام المجموعات والمستخدمين الخارجيين لقوائم التحكم في الوصول. رقم تعريف مصدر الهويات في Cloud Search الذي أعدّه مشرف Google Workspace.

حساب الخدمة api.serviceAccountPrivateKeyFile = path-to-private-key

مطلوبة. المسار إلى ملف مفتاح حساب خدمة Cloud Search الذي أنشأه مشرف Google Workspace.

معلمات الوصول إلى قاعدة البيانات

المكان المَعلمة
عنوان URL لقاعدة البيانات db.url = database-URL

مطلوبة. تمثّل هذه السمة المسار الكامل لقاعدة البيانات التي سيتم الوصول إليها، مثل jdbc:mysql://127.0.0.1/dbname.

اسم المستخدم وكلمة المرور لقاعدة البيانات db.user = username
db.password = password

مطلوبة. اسم مستخدم وكلمة مرور صالحان يستخدمهما الموصّل للوصول إلى قاعدة البيانات. يجب أن يمتلك مستخدم قاعدة البيانات هذا إذن وصول للقراءة إلى السجلات ذات الصلة بقاعدة البيانات التي تتم قراءتها.

برنامج تشغيل JDBC db.driverClass = oracle.jdbc.OracleDriver

مطلوب فقط إذا كان برنامج تشغيل JDBC 4.0 غير محدد بالفعل في مسار الفئة.

مَعلمات طلب بحث SQL للاجتياز

يجتاز الموصل سجلات قاعدة البيانات باستخدام استعلامات SQL SELECT في ملف الإعداد. يجب عليك إعداد طلب بحث الاجتياز الكامل، علمًا بأنّ طلبات الاجتياز التزايدي اختيارية.

يقرأ الاجتياز الكامل كل سجل قاعدة بيانات تمت تهيئته للفهرسة. يجب إجراء اجتياز كامل لفهرسة السجلات الجديدة في Cloud Search وأيضًا لإعادة فهرسة جميع السجلات الحالية.

يقرأ الاجتياز المتزايد ويعيد فهرسة سجلات قاعدة البيانات التي تم تعديلها حديثًا والإدخالات الحديثة لقاعدة البيانات. ويمكن أن تكون الاجتيازات التزايدية أكثر كفاءة من الاجتيازات الكاملة. لاستخدام عمليات الاجتياز التزايدية، يجب أن تحتوي قاعدة البيانات على حقول للطوابع الزمنية للإشارة إلى السجلات المعدَّلة.

ينفّذ الموصل عمليات الاجتياز هذه وفقًا للجداول الزمنية التي تحدّدها في معلمات جدول الاجتياز.

المكان المَعلمة
طلب الاجتياز الكامل db.allRecordsSql = SELECT column-1[, column-2,...] FROM database-name

مطلوبة. يتم تشغيل الاستعلام لكل اجتياز كامل.

يجب أن يتوفر كل اسم عمود سيستخدمه الموصِّل بأي سعة (المحتوى أو المعرّف الفريد أو قوائم التحكم في الوصول) في طلب البحث هذا. يجري الموصِّل بعض عمليات التحقّق الأوّلية عند بدء التشغيل لرصد الأخطاء وعمليات الحذف. لهذا السبب، لا تستخدم طلب البحث العام "SELECT * FROM ...".

الاجتياز الكامل على صفحات db.allRecordsSql.pagination = {none | offset}

يمكن أن تكون القيمة:

  • لا شيء: عدم استخدام التقسيم على صفحات
  • offset: استخدام التقسيم على صفحات حسب إزاحة الصف

    لاستخدام التقسيم على صفحات حسب الإزاحة، يجب أن يحتوي طلب بحث SQL على علامة استفهام للعنصر النائب (?) لإزاحة صف تبدأ بصفر. في كل عملية اجتياز كاملة، يتم تنفيذ طلب البحث بشكل متكرر حتى لا يتم عرض أي نتائج.

طلب الاجتياز الإضافي db.incrementalUpdateSql = SELECT column-1[, column-2,...] FROM database-name WHERE last_update_time > ?

يكون هذا الخيار مطلوبًا في حال جدولة عمليات الاجتياز المتزايدة.

يشكّل "?" في طلب البحث عنصرًا نائبًا إلزاميًا لقيمة طابع زمني. ويستخدم الموصِّل الطابع الزمني لتتبُّع التعديلات بين طلبات بحث SQL المتزايدة.

لتتبُّع عمود الطابع الزمني لقاعدة البيانات لوقت آخر تعديل، أضِف الاسم المستعار timestamp_column إلى عبارة SQL، وإلا، استخدِم الطابع الزمني الحالي لاجتياز الموصِّل.

بالنسبة إلى الاجتياز التدريجي الأول، يستخدم الموصل وقت بدء الموصل. بعد إجراء الاجتياز المتزايد الأول، يخزّن Cloud Search الطابع الزمني حتى تتمكن إعادة تشغيل الموصل من الوصول إلى الطابع الزمني للاجتياز المتزايد السابق.

المنطقة الزمنية لقاعدة البيانات db.timestamp.timezone = America/Los_Angeles

تحدد المنطقة الزمنية لاستخدامها للطوابع الزمنية لقاعدة البيانات. الطابع الزمني لقاعدة البيانات المستخدَم لتحديد إضافات السجلات الجديدة أو سجلات قاعدة البيانات المعدّلة حديثًا. يكون الإعداد التلقائي هو المنطقة الزمنية المحلية التي يعمل فيها الموصِّل.

أمثلة على طلبات بحث لغة الاستعلامات البنيوية (SQL)

  • طلب بحث الاجتياز الكامل الأساسي الذي يقرأ كل سجل اهتمام في قاعدة بيانات الموظفين للفهرسة:
    db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \
        FROM employee
  • تحديد التقسيم على صفحات حسب الإزاحة، وتقسيم الاجتياز الكامل إلى استعلامات متعددة.

    بالنسبة إلى SQL Server 2012 أو Oracle 12c (بنية SQL 2008 القياسية):

    db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \
        FROM employee \
        ORDER BY customer_id OFFSET ? ROWS FETCH FIRST 1000 ROWS ONLY
    db.allRecordsSql.pagination = offset
    

    أو بالنسبة إلى MySQL أو Google Cloud SQL:

    db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \
        FROM employee \
        ORDER BY customer_id LIMIT 1000 OFFSET ?
    db.allRecordsSql.pagination = offset
  • طلب الاجتياز الكامل الذي يطبق قوائم التحكم بالوصول (ACL) الفردية باستخدام الأسماء المستعارة:
    db.allRecordsSql = SELECT customer_id, first_name, last_name,  employee_id, interesting_field, last_update_time, \
         permitted_readers AS readers_users, \
         denied_readers AS denied_users, \
         permitted_groups AS readers_groups, \
         denied_groups AS denied_groups \
         FROM employee
  • طلب الاجتياز التدريجي الأساسي:
    db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time \
         FROM employee \
         WHERE last_update_time > ?
  • طلب الاجتياز الإضافي الذي يطبّق قوائم التحكم بالوصول (ACL) الفردية بأسماء مستعارة:
    db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time, \
         permitted_readers AS readers_users, \
         denied_readers AS denied_users, \
         permitted_groups AS readers_groups, \
         denied_groups AS denied_groups \
         FROM employee \
         WHERE last_update_time > ?
  • طلب الاجتياز الإضافي الذي يستخدم الطابع الزمني لقاعدة البيانات بدلاً من الوقت الحالي:
    db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, \
         last_update_time AS timestamp_column \
         FROM employee \
         WHERE last_update_time > ?

مَعلمات تعريف الأعمدة

تحدّد المَعلمات التالية الأعمدة التي تستخدمها في عبارات الاجتياز ولتحديد كل سجلّ بشكل فريد.

المكان المَعلمة
كل الأعمدة db.allColumns = column-1, column-2, ...column-N

مطلوبة. تحدد جميع الأعمدة المطلوبة في استعلام SQL عند الوصول إلى قاعدة البيانات. ويجب أن تتم الإشارة بوضوح إلى الأعمدة المحدّدة بهذه المَعلمة في طلبات البحث. وتتم مقارنة كل مَعلمة أخرى لتعريف الأعمدة بهذه المجموعة من الأعمدة.

مثال:

db.allColumns = customer_id, first_name, last_name, phone, change_timestamp
أعمدة المفاتيح الفريدة db.uniqueKeyColumns = column-1[, column-2]

مطلوبة. يسرد عمود قاعدة بيانات واحد يحتوي على قيم فريدة أو عن طريق مجموعة من الأعمدة التي تحدّد قيمها معًا رقم تعريف فريدًا.

تتطلّب خدمة Cloud Search أن يكون لكل مستند يمكن البحث فيه معرّف فريد داخل مصدر البيانات. يجب أن تكون قادرًا على تحديد معرّف فريد لكل سجلّ قاعدة بيانات من قيم الأعمدة. في حال تشغيل موصلات متعددة على قواعد بيانات منفصلة ولكن الفهرسة في مجموعة بيانات مشتركة، احرص على تحديد معرّف فريد في جميع المستندات.

أمثلة:

db.uniqueKeyColumns = customer_id
# or
db.uniqueKeyColumns = last_name, first_name
عمود "رابط عنوان URL" url.columns = column-1[, column-2]

مطلوبة. تحدّد واحدًا أو أكثر من أسماء الأعمدة المحددة وصالحة التي يتم استخدامها لعنوان URL المستخدَم في نتيجة بحث قابلة للنقر. بالنسبة إلى قواعد البيانات التي لا تتضمن عنوان URL مرتبطًا بكل سجلّ قاعدة بيانات، يمكن استخدام رابط ثابت لكل سجلّ.

ومع ذلك، إذا حدّدت قيم الأعمدة رابطًا صالحًا لكل سجلّ، يجب تحديد أعمدة عنوان URL للعرض وقيم إعدادات التنسيق.

تنسيق عنوان URL url.format = https://www.example.com/{0}

تحدِّد هذه السمة تنسيق عنوان URL للعرض. تشير المعلمات المرقّمة إلى الأعمدة المحددة في db.columns بالترتيب، بدءًا من الصفر.

إذا لم يتم تحديد ذلك، سيكون الإعداد التلقائي هو "{0}."

في ما يلي الأمثلة على هذا الجدول.

الأعمدة ذات الترميز بالنسبة المئوية لعنوان URL url.columnsToEscape = column-1[, column-2]

تحدِّد الأعمدة من db.columns والتي سيتم ترميز قيمها بالنسبة المئوية قبل تضمينها في سلسلة عنوان URL المنسّقة.

أمثلة على أعمدة عناوين URL

لتحديد الأعمدة المستخدمة في طلبات بحث الاجتياز وتنسيق عنوان URL للعرض:

  • لاستخدام عنوان URL ثابت لا يستخدم أي قيم لسجلّ قاعدة البيانات:
    url.format = https://www.example.com
  • لاستخدام قيمة عمود واحد تمثل عنوان URL للملف الشخصي:
    url.format = {0}
    url.columns = customer_id
  • لاستخدام قيمة عمود واحد يتم استبدالها في عنوان URL للملف الشخصي في الموضع {0}:
    url.format = https://www.example.com/customer/id={0}
    url.columns = customer_id
    url.columnsToEscape = customer_id
  • لاستخدام قيم أعمدة متعددة لإنشاء عنوان URL للملف الشخصي (تعتمد الأعمدة على الترتيب):
    url.format = {1}/customer={0}
    url.columns = customer_id, linked_url
    url.columnsToEscape = customer_id

حقول المحتوى

واستخدِم خيارات المحتوى لتحديد قيم السجلّ التي يجب جعلها جزءًا من المحتوى القابل للبحث.

المكان المَعلمة
عمود بحث الأعلى جودة contentTemplate.db.title = column-name

مطلوبة. العمود الأعلى جودة لفهرسة البحث وتحديد أولوية النتائج

تحديد أولوية الأعمدة لشبكة البحث contentTemplate.db.quality.high = column-1[, column-2...]
contentTemplate.db.quality.medium = column-1[, column-2...]
contentTemplate.db.quality.low = column-1[, column-2...]

يتم تصنيف أعمدة المحتوى (باستثناء مجموعة الأعمدة التي تخصّ contentTemplate.db.title) كحقول ذات جودة بحث عالية أو متوسطة أو منخفضة. يتم ضبط الأعمدة غير المحدّدة تلقائيًا على قيمة منخفضة.

أعمدة بيانات المحتوى db.contentColumns = column-1[, column-2...]

تحديد أعمدة المحتوى في قاعدة البيانات. ويتم تنسيق هذه الملفات وتحميلها إلى Cloud Search كمحتوى مستند قابل للبحث.

إذا لم تحدّد قيمة، ستكون القيمة التلقائية "*" تشير إلى أنّه يجب استخدام جميع الأعمدة للمحتوى.

عمود Blob db.blobColumn = column-name

حدِّد اسم عمود كائن ثنائي كبير لاستخدامه لمحتوى المستند بدلاً من مجموعة من أعمدة المحتوى.

إذا تم تحديد عمود كائن ثنائي كبير (blob)، يُعتبر ذلك خطأً إذا تم تحديد أعمدة المحتوى أيضًا. ومع ذلك، سيظلّ مسموحًا باستخدام تعريفات أعمدة البيانات الوصفية وأعمدة البيانات المنظَّمة مع أعمدة الكائن الثنائي الكبير (blob).