أكثر

OGR2OGR FileGDB 2 تنسيق آخر مع بنية تغيير الاستعلام -SQL

OGR2OGR FileGDB 2 تنسيق آخر مع بنية تغيير الاستعلام -SQL


أنا أستخدم GDAL 1.11.1 مع ESRI FileGDB Driver ، الإصدار 10.x GDB.

عندما أستخدم ogr2ogr ، فإن هدفي هو فرز الحقول الخاصة بي بشكل مختلف وفي بعض الحالات ، إعادة تسميتها. المشكلة هي عندما أستدعي FileGDB driver إلى تنسيق آخر ، يتغير هيكل الجدول الخاص بي لكل سلاسل.

فمثلا:

  • إدخال FileGDB: حقل سلسلة ، 3 من الطول
  • ملف الإخراج GDB: حقل سلسلة ، يتم تعيين جميع الحقول على 0 (ogrinfo) أو 65536 (ArcGIS 10.1)
  • إخراج SHP: حقل سلسلة ، يتم تعيين كل حقل على 80 (بواسطة ogrinfo)

هنا كمد بلدي. ogr2ogr -f "FileGDB" TEMP.GDB Source.gdb -sql "حدد * من input_layer"

لقد حاولت عمل ALTER TABLE أمة ALTER COLUMN myfield2 TYPE حرف (15) لكنها لا تعمل على FileGDB؟

أيه أفكار؟


تم إصلاح هذه المشكلة في https://trac.osgeo.org/gdal/ticket/5806


إنشاء ملفات الشكل من SQL Server باستخدام Ogr2ogr

أحاول تشغيل الكود التالي في نافذة الأوامر. يتم تنفيذ الكود ، لكنه لا يعطيني أي قيم في ملفات SHP. يحتوي الجدول على GeographyCollections and Polygons المخزنة في حقل من نوع الجغرافيا. لقد جربت العديد من الاختلافات لنوع الجغرافيا في بيان sql - ثنائي ، نص وما إلى ذلك ولكن لم يحالفني الحظ. يحتوي ملف الإخراج .DBF على بيانات ، لذلك يعمل الاتصال بقاعدة البيانات ، ولكن لا يحتوي ملف .Shp وملف .shx على بيانات وحجمهما 17 كيلو بايت و 11 كيلو بايت على التوالي.


افتح سطر أوامر psql واكتب:

باستخدام الاستعلام أعلاه ، يمكنك استخدام الأعمدة ونوع بياناتها

& # 39 ^ (hello world) $ بدلاً من مجرد c.relname = & # 39hello world & # 39؟ & ndash Thomas أبريل 1 '19 الساعة 12:26

لا تنس إضافة اسم المخطط في حالة وجود مخططات متعددة بنفس أسماء الجدول.

إصدار يدعم البحث عن أسماء الأعمدة وأنواع الجدول في مخطط معين ، ويستخدم JOINs بدون أي استعلامات فرعية

تم تحديث إجابة Pratik لدعم المزيد من المخططات و nullables:

لجعل هذا الموضوع "أكثر اكتمالا".

طلبت أسماء الأعمدة وأنواع البيانات في عبارة SELECT (وليس جدولًا).

إذا كنت تريد القيام بذلك على عبارة SELECT بدلاً من جدول موجود فعليًا ، يمكنك القيام بما يلي:

شرح قصير ، يقوم بعمل جدول (مؤقت) لبيان التحديد الخاص بك ، والذي يمكنك "الاتصال به" عبر الاستعلام المقدم من (من بين أمور أخرى)a_horse_with_no_name وselva.


قطع الأشجار مع الإدراج / الحذف

لدي مشكلة استعلام نطاق لحلها. لا تتطلب هذه المشكلة نطاق الاستعلامات والتحديث فحسب ، بل تتطلب أيضًا إدراج عنصر من المصفوفة أو حذفه. هناك سلسلة من العمليات التي يجب إجراؤها بالترتيب الذي تظهر به في الإدخال. يمكن أن تكون العمليات واحدة مما يلي: تحديث موضع المصفوفة بقيمة جديدة ، وإدراج عنصر جديد في بعض فهرس المصفوفة ، وإزالة عنصر في بعض فهرس المصفوفة ، والاستعلام عن معلومات حول نطاق من المصفوفة.

لقد جربت تطبيق Segment Tree حيث يتم تخزين العقد في مصفوفة. الطفل الأيسر للعقدة في الفهرس p عند الفهرس 2p ، الطفل الأيمن عند الفهرس 2p + 1. هذا التنفيذ ليس كافيًا ، لأن الشجرة ثابتة. كل ما يمكنني فعله هو استعلامات النطاق وتحديث مواضع المصفوفة الأصلية. يتطلب إدخال أو حذف العناصر في المصفوفة الأصلية إعادة بناء الشجرة ، وبالتالي فإن وقت التشغيل هو O (n) (بطيء جدًا بالنسبة لحالات الاختبار). برنامجي صحيح ، لكنه بطيء جدًا.

لقد بحثت في Google عن شرائح الأشجار مع الإدراج / الحذف وقرأت أنه من الممكن القيام بذلك باستخدام أشجار البحث الثنائية ذاتية التوازن ، مثل أشجار AVL أو أشجار الأحمر والأسود. لكني أواجه مشكلة في فهم كيفية عمل الإدراج أو الحذف في شجرة المقطع الديناميكية التي أحتاجها.


OGR2OGR FileGDB 2 تنسيق آخر بهيكل تغيير استعلام -SQL - أنظمة المعلومات الجغرافية

##### قبل الشروع في هذا المشروع ، تأكد من تنزيل المجلد المضغوط الذي يحتوي على جميع المشاريع والصور والإرشادات اللازمة. لأولئك الذين ليسوا على دراية بهذا النوع من التنزيل ، انظر بالقرب من أعلى يمين المستودع وانقر على "تنزيل ZIP".

كجزء من التزام LINZ بالمجتمع المفتوح ، نصدر جميع البرامج النصية للمشروع والدعم لخرائط أساس LINZ NZ Terrain لإنشاء خريطة الأساس الشخصية. توضح الإرشادات التالية عمليات إنشاء خرائط أساس LINZ على أنظمة Linux و Windows الأساسية. للحصول على أفضل النتائج ، من المفيد أن تكون هذه البرامج والعناصر في مكانها قبل البدء:

  • TileMill https://gist.github.com/bsudekum/b4606871250d9d834b3d
  • PostgreSQL مع امتدادات PostGIS http://postgis.net/ أو http://www.postgresql.org
  • QGIS (لمستخدمي Windows) http://www.qgis.org/en/site/forusers/download.html (إصدار OSGeo4W)
  • GDAL (لمستخدمي Linux)
  • قاعدة البيانات الجغرافية للملف لطبقات المتجهات
  • DEM والبلاط النقطي hillshade
  • أنماط تعبئة النسيج

يستخدم هذا المشروع مجموعة من البيانات المتجهية والنقطية المستمدة من LINZ Data Service (LDS) وقاعدة بيانات Landcover (LCDB 3.3) بواسطة Landcare Research. بالنسبة لأولئك الذين ليسوا على دراية بـ LDS أو LRIS ، ستساعد الروابط التالية المستخدمين على التعرف أكثر على هذه الخدمات والبيانات التي يقدمونها.

####### يجب تنزيل بيانات طبقة LCDB 3.3 من موقع Landcare Research المدرج أدناه.

## إعداد المشروع تتطلب إعادة بناء خرائط الأساس استخدام TileMill و QGIS وقاعدة بيانات PostgreSQL مع ملحقات PostGIS. المدرجة أدناه روابط للبرامج وإرشادات عامة للبنيات على أنظمة Linux و Windows.

تم العثور على أحدث عمليات التثبيت لـ TileMill و Windows و Linux هنا:

قم بتثبيت TileMill حسب التعليمات. اعتمادًا على إصدار مستخدمي Linux الذي يتم تشغيله ، قد يكون لدى TileMill متطلبات بناء إضافية. يمكن فقط تنزيل الإصدارات الحديثة من Tilemill المضمنة في Atom Shell وتشغيلها من المجلد المثبت دون مزيد من التثبيت.

حزمة كاملة لنظام التشغيل windows 32 أو 64 بت ، بما في ذلك PostgreSQL و PostGIS و PGAdmin III متاحة للتنزيل هنا:

نوصي بالإصدار 9.1+ من PostgreSQL والإصدار 2.1+ من PostGIS

قم بتثبيت PostgreSQL و PostGIS وإنشاء قاعدة بيانات مكانية على النحو الموصى به مع المعلمات أدناه. إذا كنت تقوم بتشغيل قاعدة بيانات PostgreSQL على مضيفك المحلي ، بهدف إنشاء خرائط أساس ، فيجب إعداد تهيئة الخادم لجميع الاتصالات الموثوقة من المضيف المحلي. يمكن القيام بذلك عن طريق الإضافة تستضيف كل الثقة 127.0.0.1/32 إلى pg_hba.conf ثم إعادة تشغيل الخادم. لإنشاء قاعدة البيانات ، قم بتشغيل SQL التالي:

يجب عليك بعد ذلك إنشاء مستخدم قاعدة بيانات عادي ستتصل به Tilmill. قم بتشغيل SQL التالي:

ستبدو سلسلة الاتصال الخاصة بك بقاعدة البيانات بعد ذلك (إلا إذا لم تسمح باتصالات موثوقة)

ضمن قاعدة البيانات الجديدة ، NZ_Data ، قم بتشغيل SQL التالي:

السماح بالوظائف المكانية لقاعدة بيانات PostgreSQL.

#### 3- QGIS (OSGeo4W) لنظام التشغيل Windows أو GDAL لمستخدمي Linux

يوفر QGIS وصولاً سهلاً إلى قابلية قراءة GDAL و FileGDB عبر OSGeo4W Shell في أنظمة Windows. بالنسبة لهذا المشروع ، يلزم الوصول إلى GDAL والقدرة على قراءة FileGDB. لا تمتلك أنظمة Windows حق الوصول لقراءة GDAL عبر سطر الأوامر. يتم توفير الوصول عن طريق تثبيت OSGeo4W وتشغيل عمليات سطر الأوامر عبر OSGeo4W Shell. يحتاج مستخدمو Linux فقط إلى تثبيت GDAL من خلال العمليات القياسية التي توفر الأوامر عبر محطة طرفية قياسية.

يتيح بناء OSGeo4W لـ QGIS للمستخدمين الوصول إلى GDAL والقدرة على قراءة FileGDB عبر QSGeo4W Shell في Windows. قم بتثبيت QGIS حسب التعليمات. يحتاج مستخدمو Linux فقط إلى تثبيت برامج تشغيل GDAL إذا رغبت في ذلك ، ومع ذلك ، يوصى بالتثبيت الكامل لـ QGIS ، لأنه غالبًا ما يكون مفيدًا لتصور البيانات واختبارها.

يحتوي هذا المشروع على مزيج من البيانات النقطية والمتجهية بحجم إجمالي يبلغ حوالي 21 جيجابايت. يوجد حد 3.5 جيجا بايت للتنزيل المباشر من LDS ، لذا لا يمكن حاليًا الحصول على الحزمة الكاملة للمتجه والنقطية في تنزيل واحد. يجب طلب Vector و hillshade عبر خدمة البريد السريع من LDS ، ومع ذلك ، تتطلب DEM rasters تسليم البريد السريع. فمن المستحسن أن يجمع المستخدمون جميع البيانات في حزمة ساعي لأنها طريقة مفيدة تجمع جميع الجداول والنقطية الضرورية على محرك أقراص واحد. ESRI File GDB و GeoTIFF هي تنسيقات الطبقات الموصى بها. فيما يلي وصف للحصول على الحزمة التي تحتوي على بيانات المتجه والبيانات النقطية اللازمة لإنشاء الخريطة الأساسية.

استخدم هذا الارتباط الجغرافي لـ LDS من أجل التحميل المسبق لكل الطبقات الضرورية لإعادة بناء خرائط الأساس. يؤدي الاتصال بـ LDS باستخدام هذا الارتباط إلى تحديد الطبقات وإعدادها للتنزيل. يجب أن يكون هناك ثمانية عشر طبقة متجهة وملفين نقطيين محددين. يرجى ملاحظة التعليقات المتعلقة بتنزيلات DEM أدناه.

بعد النقر على الرابط ، يتم نقلك إلى LINZ Data Service (LDS) ، مع تحميل الطبقات مسبقًا وجاهزة للتنزيل. انظر إلى الزاوية اليمنى العليا من موقع LDS واختر "Download or Order".

حاليًا ، نظرًا لأن DEM يتجاوز حد التنزيل 3.5 جيجا بايت لـ LDS ، يجب على المستخدمين طلب هذه الطبقة عبر خدمة البريد السريع. يتم الوصول إلى هذه الخدمة من خلال LDS ويمكن إعدادها من خلال نافذة التنزيل:

يوصى بأن تكون مربعات DEM بتنسيق .tif. هناك 115 قطعة DEM منفصلة تم تسليمها في مجلد واحد. يجب وضع هذا المجلد على نظامك المحلي في مكان يسهل الوصول إليه. لاحظ مسار الملف حيث ستحتاج إليه لاحقًا لإنشاء ملف .vrt وربط بيانات DEM في النهاية بـ Tilemill.

بلاط Hillshade متاح كخدمة بريد سريع أو للتنزيل المباشر. يُقترح على المستخدمين طلب hillshade و DEM كخدمة بريد سريع معًا في نفس الوقت. احتفظ بجميع مربعات التلال في مجلد واحد.

يوصى بأن تكون بلاط Hillshade بتنسيق .tif. يوجد 115 بلاطة منفصلة لتظليل التلال يتم تسليمها في مجلد واحد. يجب وضع هذا المجلد على نظامك المحلي في مكان يسهل الوصول إليه. لاحظ مسار الملف حيث ستحتاج إليه لاحقًا لإنشاء ملف .vrt وربط بيانات hillshade في النهاية بـ Tilemill.

######قاعدة بيانات الغطاء الأرضي (LCDB 3.3) في بوابة أنظمة معلومات الموارد الأرضية (LRIS)

تظهر قاعدة بيانات الغطاء الأرضي 3.3 (LCDB 3.3) ، التي طورتها Land Research ، بشكل بارز في خريطة الأساس الملونة وهي ضرورية لكل من الخرائط الملونة والأبيض والأسود. يتم تنزيل البيانات من بوابة LRIS بشكل مشابه لتنسيق التنزيل المستخدم بواسطة LDS. FileGDB هو تنسيق الملف الموصى به. يوجد أدناه رابط LRIS و LCDB 3.3:

WGS84 Web Mercator (EPSG: 3857) تم اقتراحه لتجنب أخطاء الإسقاط غير المتوقعة في TileMill وهو الأكثر ملاءمة لتطبيقات رسم خرائط الويب القياسية. يمكن للمستخدمين تحديد الإسقاط المطلوب لطبقاتهم قبل طلب تنزيلهم في LDS.

من الممكن استخدام توقعات أخرى ، على سبيل المثال NZTM2000 (EPSG: 2193) أو WGS84 (EPSG: 4326). تصف المدونة التالية عملية تغيير إسقاط المصدر لمشروعات TileMill من EPSG: 3857 إلى تنسيق الإسقاط المطلوب:

######FileGDB إلى تحويل قاعدة بيانات PostgreSQL

بمجرد الحصول على جميع بيانات المتجه ، يحتاج المستخدمون إلى تحميل وتحويل طبقات قاعدة البيانات الجغرافية للملف إلى جداول Postgres. ما يلي يصف هذه العملية.

لا يمكن استيراد جداول FileGDB مباشرة إلى قواعد بيانات PostgreSQL. في نظام التشغيل Windows ، يؤدي استخدام أداة سطر الأوامر ogr2ogr عبر قذيفة OSGeo4W إلى تحقيق هذه المهمة. يمكن لمستخدمي Linux ببساطة تشغيل ogr2ogr في المحطة إذا تم تثبيت GDAL بشكل صحيح. اكتمل استيراد FileGDB إلى PostgreSQL باستخدام وظائف سطر الأوامر التالية (تأكد من تغيير الأدلة إلى المجلد الذي يحتوي على البيانات):

ملحوظة: قد تحتاج إلى تغيير الخاص بك اسم االمستخدم و كلمه السر المعلمات لتلائم تكوين قاعدة بيانات PostgreSQL.

عند التثبيت ، يبني TileMill نفسه في المجلد / Documents في Windows وفي Linux ضمن المجلد / Documents / Mapbox.

تحتوي مجلدات المشروع على أوراق أنماط تستخدمها TileMill لبناء كل مشروع خريطة. يتم تضمين هذين المجلدين ، NZ Terrain Graphite و NZ Terrain Natural Color ، في تنزيل الملف المضغوط في بداية دليل التعليمات هذا. تشير الطبقات الموجودة في كل ورقة أنماط حاليًا إلى قاعدة بيانات PostgreSQL. لا يلزم إجراء أي تعديل ، ومع ذلك ، قد تكون هناك حالات يحتاج فيها المستخدم إلى إعادة ربط مسارات الملفات ، على سبيل المثال إعادة ربط DEM و Hillshade .vrt بكل مشروع. ضع أوراق الأنماط التي تم تنزيلها محليًا داخل مجلد المشاريع في MapBox. (… Documents MapBox project)

يتم تضمين تعبئة النسيج النقطي في الحزمة الأصلية التي تم تنزيلها. يمكن أيضًا عرضها وتنزيلها هنا: https://github.com/linz/linz_basemaps/tree/master/img. ضع القوام محليًا في:. المستندات MapBox ذاكرة التخزين المؤقت. ملفات النسيج المطلوبة لهذا المشروع هي:

مع وضع الخطوط النقطية وظلال التلال في مكانهما ، قم بإنشاء ملف .vrt في نفس المجلد مثل البيانات النقطية المعنية. مطلوب ملف تنسيق ظاهري GDAL (VRT) من أجل hillshade و DEM النقطية ، ومع ذلك ، لا يتم تسليمها مع الحزم النقطية. سيحتاج المستخدمون إلى إنشاء ملفات .vrt هذه بأنفسهم وتضمينها في مجلداتهم الخاصة. بالنسبة لأولئك الذين ليسوا على دراية بتنسيق vrt ، يوجد أدناه دليل مفيد:

ستنشئ عمليات سطر أوامر GDAL التالية ملف .vrt. هناك حاجة إلى ملف .vrt لكل من hillshade وملفات DEM النقطية ، لذا قم بتشغيل أمر GDAL في كلا المجلدين النقطيين. قبل تشغيل الأوامر أدناه ، تأكد من تغيير الدلائل ، والانتقال إلى المجلد الذي يحتوي على الملفات النقطية. قم بإنشاء .vrt في نفس المجلد مثل الملفات النقطية.

Windows (يتم تشغيله من خلال OSGeo4W Command Shell):

######ربط Hillshade و DEM

بمجرد بدء المشروع لأول مرة في Tilemill ، يُطلب من المستخدمين إعادة ربط Hillshade و DEM مرة أخرى بـ .vrt. افتح علامة تبويب الطبقات في الركن الأيسر السفلي من نافذة Tilemill ، وابحث عن طبقة hillshade أو DEM ، وحدد شكل القلم الرصاص الذي يفتح نافذة المحرر. انتقل إلى مكان تخزين .vrt الخاص بك ، وحدده واحفظه.

صدر هذا المشروع بموجب شروط جديدة نسب المشاع الإبداعي 3.0 نيوزيلندا الترخيص وموجود هنا:

حقوق الطبع والنشر 2013 Crown Copyright (c) Land Information New Zealand and the New Zealand Government.


إذا كنت تريد بالفعل إغلاق الاتصال (لماذا؟ إذا قمت بتشغيل أوامر sql بشكل متكرر ، فربما تريد إعادة استخدامه ، أو حتى استخدام تجمع الاتصال بشكل أفضل) ، فأنت بحاجة إلى القيام بذلك في رد الاتصال بنتيجة الاستعلام. يتم وضع جميع الأوامر في قائمة انتظار الأوامر ومعالجتها بالتتابع.

هذا ما تفعله:

  • فتح دفق الاتصال إلى mysql
  • أضف أمر المصافحة إلى قائمة الانتظار
  • إضافة أمر الاستعلام إلى قائمة الانتظار
  • إضافة أمر إنهاء إلى قائمة الانتظار ، ووضع علامة على الاتصال على أنه إغلاق
  • بدء معالجة الأوامر
  • الآن تتم معالجة المصافحة عند الاتصال في حالة "الإغلاق"

نظرًا لأن العقدة js غير متزامنة ، يتم تنفيذ connection.connect () و connection.end () بشكل متوازي ،

إذا كنت تريد تحديد تسلسل التنفيذ ، فاستخدم عمليات الاسترجاعات مثل


3 إجابات 3

الهدف من التطبيع هو إزالة التحديثات الشاذة. على وجه التحديد ، يجب أن يؤدي تغيير حقيقة واحدة إلى تغيير عمود واحد من صف واحد فقط. ضع في اعتبارك كيفية تطبيق ذلك في تصميماتك المقترحة إذا تم ، على سبيل المثال ، تغيير ShippingDestination ، وهو مطلب عمل معقول للغاية.

في التصميم الأول ، قد تتغير صفوف متعددة ، حيث من المحتمل أن تكون هناك صفوف متعددة لـ SalesOrderNumber واحد ، لكل منها PartID الخاص به. مع التصميم الثاني يتم تحديث صف واحد فقط. لذا فإن التصميم الثاني أكثر تطبيعًا.

لوجهة نظر مختلفة ، يمكنك إلقاء نظرة على التبعيات - ما هي القيم التي تتغير في انسجام. في التصميم الأول ، إذا انتقلت من صف إلى آخر بنفس رقم SalesOrderNumber ، فستكون وجهة الشحن كما هي مع تاريخ الاستحقاق. ومع ذلك ، فإن OrderQuantity ستختلف بين هذين الصفين. لذا يعتمد OrderQuantity على أكثر من مجرد SalesOrderNumber - فأنت بحاجة إلى معرفة PartID أيضًا. نوعان من التبعيات المختلفة لذلك جدولين مختلفين. (هناك المزيد من التبعيات الوظيفية / تحليل التبعية ، ولكن هذا هو جوهر ذلك.)

2NF يتحدث عن "تبعية مفتاح الجزء" - ما إذا كانت جميع الأعمدة في المفتاح مطلوبة لتحديد جميع قيم الأعمدة غير الرئيسية. بالنظر إلى التصميم الأول ، يوجد مفتاح مركب لـ (SalesOrderNumber ، PartID). بينما ننتقل من صف واحد مع رقم SalesOrderNumber معين إلى التالي بنفس الرقم ، ستظل بعض الأعمدة (ShippingDestination على سبيل المثال) هي نفسها دائمًا حسب التعريف. PartID موجود في المفتاح ولكنه غير مطلوب لتحديد قيمة ShippingDestination. لذا فإن التصميم الأول ليس 2NF.

3NF يتحدث عن "التبعية متعدية" - ما إذا كانت قيمة العمود تتغير بسبب تغير المفتاح أو بسبب تغير قيمة عمود منفصل غير مفتاح. لا أعرف ما يكفي عن قواعد العمل الفعلية لأقول ما إذا كان التصميم الثاني في 3NF لذلك سأبتكر سيناريو للتوضيح. لنفترض أن العميل يمكن أن ينتمي إلى قناة واحدة فقط. بينما ننتقل من صف واحد بالترتيب إلى التالي ، نرى أن كلاً من رقم العميل والقناة يتغيران. ومع ذلك ، فإن القناة تغير القيمة ليس بسبب وجود SalesOrderNumber مختلف ولكن بسبب وجود CustomerNumber مختلف. تختلف القناة حسب SalesOrderNumber عن طريق (أي بشكل انتقالي) CustomerNumber. في السيناريو المصطنع الخاص بي ، يجب نقل القناة من "الطلب" إلى جدول جديد (العميل) يتم تحديده بواسطة رقم العميل.

لانتهاك BCNF ، يجب أن يحتوي الجدول على أكثر من مفتاح مرشح يشترك في عمود واحد على الأقل. لا يحتوي أي من التصميمين على هذا ، مرة واحدة في 3NF ، التصميم أيضًا في BCNF.


تلميحات الأداء

عند الكتابة في DBMS للمعاملات (SQLite / PostgreSQL ، MySQL ، إلخ) ، قد يكون من المفيد زيادة عدد عبارات INSERT المنفذة بين عبارات BEGIN TRANSACTION و COMMIT TRANSACTION. يتم تحديد هذا الرقم باستخدام الخيار -gt. على سبيل المثال ، بالنسبة لـ SQLite ، فإن التحديد الصريح لـ -gt 65536 يضمن الأداء الأمثل أثناء ملء بعض الجداول التي تحتوي على مئات الآلاف أو الملايين من الصفوف. ومع ذلك ، لاحظ أن -skipfailures يتجاوز -gt ويعين حجم المعاملات إلى 1.

بالنسبة إلى PostgreSQL ، يمكن ضبط خيار التكوين PG_USE_COPY على YES لتحسين أداء الإدراج بشكل كبير. راجع صفحة وثائق برنامج التشغيل PG.

بشكل عام ، راجع صفحة التوثيق الخاصة ببرامج تشغيل الإدخال والإخراج للحصول على تلميحات حول الأداء.


1 إجابة 1

لدي عادةً خدمة مخصصة لتلبية احتياجات كل تطبيق من تطبيقات الواجهة الأمامية. تقوم هذه الخدمة بأي رفع للواجهة الخلفية نيابة عن الواجهة الأمامية. هذا له اثنين من الإيجابيات:

  • تنسيق البيانات لأسهل استهلاك بواسطة واجهة المستخدم. سيكون لواجهة المستخدم المختلفة متطلبات مختلفة. على سبيل المثال ، إذا كان لدي تطبيق Android ، فقد أختار خدمة الواجهة الأمامية لهذا التطبيق لاستخدام تنسيق تسلسل بديل لـ Json لأن النطاق الترددي للجهاز محدود وهناك بروتوكولات أصغر هناك.
  • افصل تنسيق البيانات التي تتطلبها الواجهة الأمامية عن الواجهة الخلفية - إذا قررت تغيير بنية Json في إحدى خدماتك ، يمكنك استخدام نمط المحول في خدمة الواجهة الأمامية.
  • نقطة وصول واحدة للواجهة الأمامية إلى الواجهة الخلفية - يمكنك التحكم في الوصول هنا وتقييد المجالات على سبيل المثال.
  • اجمع الطلبات بكفاءة - يجب ألا ترسل الواجهة الأمامية أقل عدد ممكن من الطلبات إلى الواجهة الخلفية ، ولكن في بعض الأحيان تتطلب واجهة المستخدم القليل من البيانات من عدة خدمات مختلفة. تعد خدمة الواجهة الأمامية مكانًا جيدًا لهذا المنطق ويمكنها تقديم العديد من الطلبات بشكل أكثر كفاءة.

أولاً ، احصل على قائمة بمعرف المستخدم المطابق لاسم المستخدم الأول. قم بتمرير هذه المعرفات إلى خدمة الأعمال للحصول على قائمة كائنات الأعمال هناك من خلال تحقيق التصفية.

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


1 إجابة 1

سيتم ملء كل شيء عند الإدراج ، وهو أيضًا أحد الأسباب التي تجعل وجود عدد كبير جدًا من الفهارس يعتبر ممارسة سيئة على الجداول التي تحتوي على الكثير من عمليات CRUD.

في حالتك ، لديك فقط فهرس CLUSTERED و NON CLUSTERED (يقوم SQL Server بإنشاء فهرس CLUSTERED لـ PK افتراضيًا حتى إذا لم تحدده). تحتوي الفهارس غير العنقودية على شيء يسمى "مفتاح التجميع" وهو في الأساس مؤشر إلى الفهرس العنقودي.

يتكون مفتاح التجميع من قيم مفاتيح الفهرس المجمعة من الصف الذي يتم الإشارة إليه و Uniquifier (إن وجد). مع كل إدخال ، يجب أن يقوم المفتاح العنقودي بفرز القيم الموجودة في الذاكرة ، وبالتالي يجب أن يتحرك كل مؤشر من هذه المؤشرات. ضع في اعتبارك أيضًا أن الفهارس المجمعة في SQL Server تجعل الجدول على الفور بنية B-Tree (ما لم يكن فهرس مخزن عمود) ، وهذا أحد أكبر أسباب التجزئة. نظرًا لأن قواعد بنية بيانات B-Tree يمكن أن تجبر الصفحات على الانقسام وبالتالي تغيير الهيكل الكامل للشجرة B (يشبه التأثير المتتالي).

لتجنب بعض التجزئة عند الإدراج ، يجب فرز البيانات باستخدام استعلام قبل القيام بذلك. يشرح هذا المنشور كيف يعمل ولماذا.

حقيقة ممتعة ، سيشير الفهرس غير العنقودي إلى شيء يسمى RID (معرف الصف) عندما لا يوجد فهرس متفاوت. ثم يسمى هذا جدول الكومة.