سؤال

لدي جدول "الألوان" في قاعدة البيانات الخاصة بي.

يدخل المستخدم لونا اللون من خلال واجهة المستخدم، وعمليات البحث الخلفية عن اللون الأكثر تماثلة موجودة في جدول الألوان، وحساب مسافة الألوان في مساحة HCL.

سأقوم بتطبيق خوارزمية التخزين المؤقت، والتي يجب تخزين المسافة بين مسافات الألوان المحسوبة سابقا، لتجنب عمليات الرياضيات المتكررة.

ما هو أفضل تخطيط جدول لهذا الغرض؟

هل كانت مفيدة؟

المحلول

كما قال أسامة، هذا يبدو وكأنه التحسين المبكر. بناء على وصفك للخوارزمية، أود:

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

نصائح أخرى

يمكنك القيام بذلك:

table colors(r,g,b)
table colordistance(user_r,user_g,user_b,r,g,b,distance)

ولكن هل تتوقع أن يواصل المستخدمون الدخول في نفس الأرقام ؟؟؟ الحد الأقصى للأعداد من الصفوف في هذا الجدول 16777216 إذا قمت فقط بتضمين أقرب لون.

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

أود تشغيله دون أي تخزين مؤقت للحساب حتى أراه مشكلة فعالة.

أفترض أن لونك "المسافات" يتم حساب شيء مثل:

sqrt((r1-r2)^2 + (g1-g2)^2 + (b1-b2)^2)

على افتراض أنك تستخدم 8 بت بكسل، سيكون هناك (256 ^ 3) ^ 2 تعيينات مميزة في طاولتك. هذا الكثير من مساحة الجدول. (ربما يمكن أن تضغط عليه كثيرا، ولكن ... انظر النقطة التالية.)

الشيء الآخر الذي تحتاجه إلى مراعاةه هو تكلفة البحث عن قاعدة البيانات للعثور على مسافة ملونة مقابل تكلفة القيام بالحساب. سيكون تخميني هو أن البحث عن قاعدة البيانات سيستغرق مللي ثانية أو أكثر، ولكن يجب أن يأخذ الحساب المتري 1 من ميكروث أو أقل.

الكل في الكل، باستخدام جدول قاعدة البيانات يبدو وكأنه فكرة سيئة حقا بالنسبة لي.

إليك ما أوصي به:

table colors(color_id, color_name, r, g, b)

table color_distances(color_1_id, color_2_id, distance)

الفهارس: فهرس الابتدائي (color_1_id، color_2_id) (color_1_id، المسافة، color_2_id)

سوف تحتوي Color_Distances على جميع مجموعات Color_id الممكنة، ولن يتم تحديثها إلا حسب الحاجة.

اختيار سيكون بسيطة:

SELECT similar_colors.*
FROM colors as similar_colors, color_distances
WHERE color_distances.color_1_id = <selected_color_id>
ORDER BY color_distances.distance ASC

أنا لست مألوفا للغاية مع HCL، ولكن بناء على الوصف في اللون :: التشابه :: HCL يبدو أن لونين مطلوبين كإدخال للمسافة.

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

يبدو أنه لن يكون هناك عدد محدود من المجموعات فقط؟ يبدو أنك يمكن أن تفعل الرياضيات مرة واحدة لكل مجموعة، ولديها مجرد طاولة بحث؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top