কেন ডাটাবেসগুলি স্বয়ংক্রিয়ভাবে তাদের নিজস্ব সূচি তৈরি করে না?


32

আমি ভেবেছিলাম যে ডাটাবেসগুলি প্রায়শই তাদের মুখোমুখি হয় সে সম্পর্কে যথেষ্ট পরিমাণে জানতে হবে এবং তারা যে দাবিগুলির অধীনে রাখা হয়েছে তাতে সাড়া দিতে সক্ষম হবে যে তারা অত্যন্ত অনুরোধ করা ডেটাতে সূচিপত্র যুক্ত করার সিদ্ধান্ত নিতে পারে।


3
আপনার গাড়িটি কি স্বয়ংক্রিয়ভাবে এটির নিজস্ব ফ্ল্যাট টায়ার ঠিক করে?
কেরমিট

11
আরও সঠিক সাদৃশ্যটি কি আপনার ইসিইউ জ্বালানী / তেল প্রবাহের হারগুলি নির্ধারণ করতে এবং নোংরা রেখার ক্ষতিপূরণ দিতে জ্বালানী পাম্পকে সরবরাহ করা বিদ্যুতের পরিবর্তন করে? যার উত্তর হ্যাঁ ..
ঝাড়উড

11
একটি ডাটাবেস ইতিমধ্যে একটি টেবিলের উপর একটি সূচক রাখতে পারে এটি ঠিক এখন আমাদের এটির আদেশ দেয়, একটি গাড়ি শারীরিকভাবে টায়ার প্রতিস্থাপন করতে পারে না, যতক্ষণ না আমরা এটি ব্যবহারের জন্য কিছু অস্ত্র তৈরি করি।
ঝাড়উড

1
তারা করেন - কলামগুলির ক্ষেত্রে UNIQUEবাধা রয়েছে for
dan04

8
আপনি যদি "স্ব টিউনিং ডাটাবেসগুলি" গুগল করেন তবে আপনি এ সম্পর্কে প্রচুর গবেষণা পাবেন। ভবিষ্যতে হয়তো এর কিছু উপাদান পাওয়া সাধারণ হবে।
মার্টিন স্মিথ

উত্তর:


25

হালনাগাদ

এটি এখন এসকিউএল সার্ভার অ্যাজুরেতে প্রয়োগ করা হয়েছে। এটি সুপারিশ উত্পন্ন করে

এখানে চিত্র বর্ণনা লিখুন

এবং সূচী পরিচালনাটি স্বয়ংক্রিয়ভাবে কনফিগার করা যায়

স্বয়ংক্রিয় সূচক পরিচালনা সক্ষম করুন

সুপারিশগুলি স্বয়ংক্রিয়ভাবে প্রয়োগ করতে আপনি এসকিউএল ডেটাবেস উপদেষ্টা সেট করতে পারেন। সুপারিশগুলি উপলব্ধ হওয়ার সাথে সাথে সেগুলি স্বয়ংক্রিয়ভাবে প্রয়োগ করা হবে। যেমন পরিষেবা দ্বারা পরিচালিত সমস্ত সূচক ক্রিয়াকলাপগুলির সাথে যদি পারফরম্যান্সের প্রভাবটি নেতিবাচক হয় তবে প্রস্তাবটি ফিরে দেওয়া হবে।

আসল উত্তর

কিছু ডাটাবেস ইতিমধ্যে (ধরণের) স্বয়ংক্রিয়ভাবে সূচি তৈরি করে।

এসকিউএল সার্ভারে এক্সিকিউশন প্ল্যান কখনও কখনও ইনডেক্স স্পুল অপারেটরকে অন্তর্ভুক্ত করতে পারে যেখানে আরডিবিএমএস গতিশীলভাবে ডেটার একটি সূচক অনুলিপি তৈরি করে। তবে এই স্পুলটি উত্স ডেটার সাথে একত্রে রাখা ডাটাবেসের একটি অবিরাম অংশ নয় এবং এটি ক্যোয়ারী মৃত্যুদন্ডের মধ্যে ভাগ করা যায় না, অর্থাত এই জাতীয় পরিকল্পনাগুলি কার্যকরভাবে একই ডেটাতে অস্থায়ী সূচকগুলি বার বার তৈরি করা এবং ফেলে দেওয়া যেতে পারে।

সম্ভবত ভবিষ্যতে আরডিবিএমএসগুলিতে কাজের চাপ অনুযায়ী গতিশীলভাবে ড্রপ এবং অবিচ্ছিন্ন সূচক তৈরি করার ক্ষমতা থাকবে।

সূচক অপ্টিমাইজেশনের প্রক্রিয়াটি কেবলমাত্র একটি ব্যয় বেনিফিট বিশ্লেষণের শেষে। যদিও এটি সত্য যে কোনও কাজের চাপে মানুষের কাছে প্রশ্নের তুলনামূলক গুরুত্ব সম্পর্কে নীতিগতভাবে আরও বেশি তথ্য থাকতে পারে, কারণ কেন এই তথ্যটি অপটিমাইজারের কাছে উপলব্ধ করা যায়নি তার কোনও কারণ নেই। এসকিউএল সার্ভারের ইতিমধ্যে একটি রিসোর্স গভর্নর রয়েছে যা সেশনগুলিকে অগ্রাধিকার অনুসারে বিভিন্ন রিসোর্স বরাদ্দ সহ বিভিন্ন ওয়ার্কলোড গ্রুপে শ্রেণিবদ্ধ করার অনুমতি দেয়।

কেনেথ দ্বারা উল্লিখিত অনুপস্থিত সূচক ডিএমভিগুলি অন্ধভাবে বাস্তবায়নের উদ্দেশ্যে নয় কারণ তারা কেবলমাত্র একটি নির্দিষ্ট ক্যোয়ারীর সুবিধাগুলি বিবেচনা করে এবং সম্ভাব্য সূচকগুলির ব্যয়কে অন্য প্রশ্নের জন্য গ্রহণ করার কোনও প্রচেষ্টা করে না। তেমনি এটি অনুরূপ অনুপস্থিত সূচকগুলি একত্রিত করে না। উদাহরণস্বরূপ এই ডিএমভির আউটপুট অনুপস্থিত সূচকে A,B,Cএবং এর উপর প্রতিবেদন করতে পারেA,B INCLUDE(C)

ধারণাটি সহ কয়েকটি বর্তমান সমস্যা হ'ল

  • যে কোনও স্বয়ংক্রিয় বিশ্লেষণের গুণমান যা প্রকৃতপক্ষে সূচক তৈরি করে না তা ব্যয়বহুল মডেলের যথার্থতার উপর নির্ভর করবে।
  • এমনকি স্বয়ংক্রিয় বিশ্লেষণের ক্ষেত্রের মধ্যেও একটি অনলাইন সমাধানের চেয়ে একটি অফলাইন সমাধান আরও কার্যকর হতে সক্ষম হবে কারণ এটি জরুরি যে কোনও অনলাইন সমাধান লাইভ সার্ভারে ওভারহেড রেখে বৃহত বইটি যুক্ত না করে এবং কোয়েরিগুলি সম্পাদন করার প্রাথমিক উদ্দেশ্যটিতে হস্তক্ষেপ না করে।
  • কাজের চাপের প্রতিক্রিয়া হিসাবে স্বয়ংক্রিয়ভাবে তৈরি সূচকগুলি প্রয়োজনীয়ভাবে জিজ্ঞাসার জবাবে তৈরি করা হবে যেগুলি তাদের দরকারী বলে মনে করেছিল তাই অগ্রিম সূচকগুলি তৈরি করতে পারে এমন সমাধানগুলির চেয়ে পিছিয়ে যাবে।

সময়ের সাথে সাথে ব্যয়বহুল মডেলগুলির যথার্থতা আশা করা সম্ভবত যুক্তিসঙ্গত তবে পয়েন্ট 2 সমাধানের ক্ষেত্রে আরও জটিল দেখায় এবং 3 পয়েন্টটি সহজাত অলঙ্ঘনীয়।

তবুও সম্ভবত ইনস্টলগুলির সিংহভাগ দক্ষ কর্মীদের সাথে এই আদর্শিক পরিস্থিতিতে নেই যারা ক্রমবর্ধমান কাজের চাপের পরিবর্তনগুলি নিরীক্ষণ, নির্ণয় এবং প্রত্যাশা করে (বা কমপক্ষে প্রতিক্রিয়া দেখায়)।

AutoAdmin প্রকল্পের মাইক্রোসফট রিসার্চ এ 1996 সাল থেকে চলমান হয়েছে

এই প্রকল্পের লক্ষ্যটি হল কাজের চাপের জ্ঞানকে কাজে লাগিয়ে ডাটাবেসগুলিকে স্ব-টিউন করা এবং স্ব-পরিচালনা করা

প্রকল্পের হোম পৃষ্ঠাটিতে বেশ কয়েকটি আকর্ষণীয় প্রকল্পের তালিকা দেওয়া হয়েছে। একটি এখানে প্রশ্ন বিশেষভাবে প্রাসঙ্গিক

আর একটি আকর্ষণীয় সমস্যা দেখা দেয় যখন কোনও ডিবিএ উপলব্ধ নেই (যেমন একটি এম্বেডড ডাটাবেস বা একটি ছোট ব্যবসা)। এই জাতীয় পরিস্থিতিতে, একটি স্বল্প স্পর্শ অবিচ্ছিন্ন সূচী টিউনিং পদ্ধতির গুরুত্বপূর্ণ হয়ে উঠতে পারে। আমরা আইসিডিই 2007 সালে "[ শারীরিক নকশা টিউনিংয়ের জন্য একটি অনলাইন পদ্ধতির " সমাধানগুলি অনুসন্ধান করেছি ।

লেখকরা রাজ্য

অনলাইন সূচকের মতো ক্রমবর্ধমান সাধারণ ডিবিএমএস বৈশিষ্ট্যগুলির সাথে, এটি শারীরিক নকশা সমস্যার আরও বেশি স্বয়ংক্রিয় সমাধানগুলি আবিষ্কারের জন্য আবেদন করে যা শিল্পের অবস্থাকে এগিয়ে নিয়ে যায়।

কাগজ একটি অ্যালগরিদম পরিচয় করিয়ে দেয়

এর প্রধান বৈশিষ্ট্যগুলি হ'ল:

  • অনুসন্ধানগুলি অনুকূলিত হওয়ার সাথে সাথে আমরা প্রার্থী সূচকগুলির একটি প্রাসঙ্গিক সেট সনাক্ত করি যা কার্যকারিতা উন্নত করবে। এই বৈশিষ্ট্যটি ব্যাকগ্রাউন্ডে অন্তর্নির্মিত সূচিগুলির সাথে সমান্তরালে ক্যোয়ারী প্রসেসিং চালিয়ে যেতে দেয়।
  • মৃত্যুর সময়, আমরা যেমন প্রার্থী সূচী না থাকা এবং অনুসন্ধান, আপডেট এবং স্থান সীমাবদ্ধতার উপস্থিতিতে বিদ্যমান সূচকগুলির উপযোগিতা না রেখে আমরা যে সম্ভাবনাগুলি হারাতে পারি তার উপর নজর রাখি।
  • শারীরিক ডিজাইনের পরিবর্তনটি সিআইআল-এর যথেষ্ট পরিমাণে "প্রমাণ" সংগ্রহ করার পরে আমরা স্বয়ংক্রিয়ভাবে সূচক তৈরি বা মুছে ফেলার চেষ্টা করি।
  • আমাদের সমস্যার অনলাইন প্রকৃতি সূচিত করে যে আমরা সাধারণত ভবিষ্যতে যে অনুকূল সমাধানগুলি জানি তার চেয়ে পিছিয়ে থাকব। তবে, সাবধানতার সাথে প্রমাণ পরিমাপ করে, আমরা নিশ্চিত করি যে আমরা "দেরী" সিদ্ধান্তগুলি সিগনিতে ভুগছি না - এভাবে ক্ষতিগ্রস্ত পরিমাণের সীমাবদ্ধ করে রাখি

অ্যালগরিদমের বাস্তবায়ন সার্ভার লোডের পরিবর্তনের প্রতিক্রিয়াতে থ্রোটলিংয়ের অনুমতি দেয় এবং তৈরির সময় কাজের চাপ পরিবর্তন হয় এবং প্রত্যাশিত বেনিফিট এটিকে উপযুক্ত বলে বিবেচনা করা হয় এমন নীচে নেমে গেলে সূচী সৃষ্টিটি বাতিল করতে পারে।

অনলাইন বনাম traditionalতিহ্যগত শারীরিক সুরের বিষয়ে লেখকের উপসংহার

এই কাজের অনলাইন অ্যালগরিদমগুলি কার্যকর যখন ডিবিএগুলি কাজের চাপের ভবিষ্যতের আচরণ সম্পর্কে অনিশ্চিত থাকে বা কোনও বিশ্লেষণ বা মডেলিংয়ের কোনও সম্ভাবনা না রাখে। যদি কোনও ডিবিএর কাজের চাপের বৈশিষ্ট্য সম্পর্কে সম্পূর্ণ তথ্য থাকে, তবে স্থির বিশ্লেষণ এবং বিদ্যমান সরঞ্জামগুলি (যেমন, [2, 3]) দ্বারা স্থাপন একটি আরও ভাল বিকল্প হতে পারে।

এখানে সিদ্ধান্তগুলি অন্য একটি কাগজে স্বায়ত্তশাসিত প্রশ্ন-চালিত সূচক টিউনিংয়ের মতো similar

আমাদের কাজের সূচক উপদেষ্টাকে পরাস্ত করতে পারে না যদি পুরো কাজের চাপ আগে থেকে জানা যায়। যাইহোক, বর্ধমান ও কাজের চাপের সাথে গতিশীল পরিবেশে ক্যোয়ারী চালিত পদ্ধতির আরও ভাল ফলাফল পাওয়া যায়।


4
কোনও ডিবিএর ক্যারিয়ারের পক্ষে তার দক্ষতাটি কখনই স্বয়ংক্রিয়ভাবে চালিত হওয়া যায় না তা ধারণা করা অবাক করা বিপদজনক। এটি এখনই নেটওয়ার্ক ছেলেরা কেরিয়ারকে হত্যা করছে যেহেতু সফ্টওয়্যার সংজ্ঞায়িত ডেটাসেন্ট্রেসে স্থানান্তর। ভাল ডিবিএ হিসাবে আমাদের অটোমেশন প্রয়াসকে নেতৃত্ব দেওয়া উচিত।
গাইস

20

আপনি যে সূচক নকশাটি স্থাপন করেছেন তা বিজ্ঞানের চেয়ে আর্টের কিছু বেশি। আরডিবিএমএস সাধারণ কাজের চাপ নিতে এবং একটি স্মার্ট ইনডেক্সিং কৌশল ডিজাইন করতে যথেষ্ট স্মার্ট নয়। কাজের চাপ বিশ্লেষণ করা এবং সর্বোত্তম পদ্ধতির কী তা নির্ধারণ করা মানুষের হস্তক্ষেপের উপর নির্ভর করে (পড়ুন: ডিবিএ)।

যদি সূচকগুলি না থাকার কোনও জরিমানা না থাকে তবে কেবলমাত্র অসীম সূচকগুলি যুক্ত করা এটি একটি শটগান পদ্ধতির হবে। কিন্তু যেহেতু ডেটা সংশোধন (INSERTS, UPDATES, এবং মুছে ফেলা) একটি সারণিতে সক্ষম ইন্ডেক্সগুলিতে প্রভাব ফেলেছে তখন এই সূচকের সেই পরিবর্তনশীল ওভারহেড হতে পারে।

চূড়ান্তভাবে সূচিগুলি তৈরি করতে মানব নকশা এবং কৌশল লাগে যা পঠন পারফরম্যান্সকে সর্বাধিক বাড়িয়ে তুলবে, যদিও সর্বনিম্ন পরিমাণে ডেটা সংশোধন ওভারহেড থাকে।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
পল হোয়াইট GoFundMonica বলেছেন

13

আসলে, কিছু ডাটাবেস রয়েছে যা এটি করে। উদাহরণস্বরূপ, গুগলের বিগ টেবিল এবং অ্যামাজনের সিম্পলডিবি স্বয়ংক্রিয়ভাবে সূচকগুলি তৈরি করে (যদিও এটি আরডিবিএমএস নয়) । রয়েছে অন্তত একটি মাইএসকিউএল RDBMS ইঞ্জিন যে এই আছে। এসকিউএল সার্ভার সূচকগুলিও ট্র্যাক করে রাখে যা মনে করে আপনার তৈরি করা উচিত , যদিও এটি এগুলি তৈরির ক্ষেত্রে এতটা বাড়েনি।

সমস্যাটি সঠিকভাবে পাওয়া আশ্চর্যজনকভাবে জটিল, তাই অবাক হওয়ার কিছু নেই যে বেশিরভাগ ডাটাবেসগুলি সেগুলি স্বয়ংক্রিয়ভাবে তৈরি করে না (বিগ টেবিল / সিম্পলডিবি এটি থেকে দূরে চলে যায় কারণ তারা স্বেচ্ছাসেবী যোগদানের অনুমতি দেয় না, যা বিষয়গুলিকে উল্লেখযোগ্যভাবে সহজ করে তোলে) । এছাড়াও, ফ্লাইতে সূচকগুলি তৈরি করা একটি সময় সাশ্রয়ী প্রক্রিয়া যার জন্য পুরো টেবিলটিতে একচেটিয়া অ্যাক্সেস প্রয়োজন - টেবিলটি অন-লাইনে থাকা অবস্থায় আপনি এমন কিছু ঘটতে চান না তা অবশ্যই।

তবে, বাতি ওয়েব অ্যাপ্লিকেশন সেখানে আউট যে অপেশাদার দ্বারা লিখিত হয়েছে সংখ্যা যারা এমনকি জানি না কি একটি সূচক দেওয়া হয় , আমি এখনও মনে এই বৈশিষ্ট্যটি কিছু কিছু মানুষের জন্য উপকারী হবে।


4
আমি বলব যে বিগ টেবিলের (এবং এর উত্সগুলি যেমন ক্যাসান্দ্রা, এইচবেস, ইত্যাদি) আরডিবিএমএস দ্রবণের সাথে আপেলকে কমলার সাথে তুলনা করা যায় - বিগ টেবিল এবং ডেরাইভেটস আরও বিশালাকার কী-মান বা কলামার স্টোরগুলির মতো, এবং সারি কী মূলত একটি সূচক হয় ।
সুমন

1
যথাযথভাবে। প্রশ্নটি ট্যাগ করা হয়েছে rdbmsএবং আমি মনে করি না যে বিগ টেবিলটি বিভাগে আসে।
ypercubeᵀᴹ

2
@ টাইপারকিউব: ... হ্যাঁ, আমি আমার উত্তরে তা উল্লেখ করেছি; তবে এটি এখনও আগ্রহের বিষয় হিসাবে খুব কমপক্ষে সম্পর্কে জানার মতো। আমিও বেশ কিছু উপাত্ত যে উল্লেখ আছে RDBMS এর যা এই করি, এবং ব্যাখ্যা কেন এটা সাধারণ নয়। এটি অবশ্যই
ডাউনটোটের

1
ডাউনওয়েট করিনি। আমি সম্মতি জানাই এটি খুব কঠিন সমস্যা।
ypercubeᵀᴹ

10

ইতিমধ্যে কিছু বিস্তৃত উত্তর থাকা সত্ত্বেও এগুলি আসল উত্তরের চারপাশে স্কার্ট বলে মনে হচ্ছে: সূচিগুলি সর্বদা পছন্দসই নয়।

মন্তব্যে উল্লিখিত গাড়ির সাদৃশ্যটি সহ, আপনি বলাই ভাল হবে যে সমস্ত গাড়ি চরম স্পোর্টস প্যাকেজের সাথে কেন লাগানো হয় না? আংশিকভাবে এটি ব্যয় হয়, তবে এটি এও সত্য যে লোকে লোয়ার প্রোফাইলের টায়ার পছন্দ করে না এবং হার্ড সাসপেনশন চায় না; এটি অযথা অস্বস্তিকর

সুতরাং হয়ত আপনার প্রতিটি সন্নিবেশের জন্য 1000 টি পঠন রয়েছে, কেন একটি স্বয়ংক্রিয় তৈরি সূচক থাকবে না? যদি টেবিলটি প্রশস্ত হয় এবং প্রশ্নগুলি বিভিন্ন হয় তবে কেন কয়েকটি নয়? হতে পারে প্রতিশ্রুতি সময় সমালোচনামূলক এবং পাঠগুলি হয় না; পরিস্থিতিতে আপনার inোকানটি ধীর করা অগ্রহণযোগ্য হতে পারে। হতে পারে আপনি সীমিত ডিস্কের জায়গার সাথে কাজ করছেন এবং আপনার যে স্থানটি পেয়েছেন তাতে অতিরিক্ত সূচী খাওয়ার পক্ষে সামর্থ নেই।

মুল বক্তব্যটি হ'ল সূচিপত্রগুলি স্বয়ংক্রিয়ভাবে তৈরি হয় না কারণ তারা সমস্ত কিছুর উত্তর নয়। সূচিকাগুলি ডিজাইনিং কেবল "আরে এটি আমার পাঠকে গতি বাড়িয়ে দেবে" বলার ঘটনা নয়, বিবেচনা করার মতো অন্যান্য কারণও রয়েছে।


1
+1 যদিও এই স্টাফটি স্বয়ংক্রিয়ভাবে চালানো সম্ভব এবং সম্ভাব্য, তবুও আমরা কখনই ডেটা কীভাবে ব্যবহার করা হবে তার কোনও অন্তর্দৃষ্টি নেই এমন একটি সিস্টেম দ্বারা প্রয়োগ করা একগুচ্ছ যাদু সূচকের সাথে আরও ভাল হতে যাচ্ছি না, আপনার লেখার কোনও বিষয় মনে করবেন না বনাম। বাণিজ্য বন্ধ থ্রেশহোল্ড পড়ুন। অন্য দিন আমি এই সম্পর্কে কিছুটা ব্লগ করেছি , তবে স্পষ্টতই এখানে আরও অনেক কথা বলা উচিত।
অ্যারন বারট্র্যান্ড

> হতে পারে প্রতিশ্রুতি সময় সমালোচনামূলক এবং পাঠগুলি হয় না; পরিস্থিতিতে আপনার inোকানটি ধীর করা অগ্রহণযোগ্য হতে পারে। এই ধরনের একটি ভাল উত্তর, খুব সহায়ক।
সিদ্ধার্থ

6

তারা অতীত প্রশ্নগুলি বিশ্লেষণ করতে পারে এবং সূচিগুলি তৈরি / প্রস্তাবনা তৈরি করতে পারে তবে এটি সর্বোত্তমভাবে কাজ করে না কারণ সূচকগুলি আপনার ব্যয়কে অনুকূলিতকরণ করতে চাওয়ার গতি বাড়ানোর জন্য ভারসাম্য রোধ করে এবং সার্ভারটি আপনার উদ্দেশ্যগুলি জানতে পারে না।


-4

তারা স্মার্ট নয়, তারা কোডের একটি অংশ। প্রতিবার আপনি যখন কোনও ডাটাবেসে নতুন ডেটা ইনপুট করেন, তখন এটির জন্য একটি নতুন অবস্থান এবং এটির জন্য একটি মানচিত্র সন্ধানের প্রয়োজন হয় যখন এটি অনুরোধ করা হয়। ইনডেক্সিং এর চেয়ে সহজ শোনায়, আপনি কেবল নতুন সংখ্যক ডেটাতে একটি নতুন নম্বর দিচ্ছেন? ঠিক আছে, পরবর্তী ক্যোয়ারী যদি ডেটার শেষ অংশ সম্পর্কে না হয় তবে প্রায় 36271 খণ্ড আগে হয়? আপনি আপনার সূচী দিয়ে এটি সহজেই খুঁজে পেতে পারেন, তাই না? তবে যদি ক্যোয়ারিতে 1997 সালে তৈরি পুরানো 36271 টুকরোতে "ফিশিং" জাতীয় শব্দটি পাওয়া যায় তবে কী হবে? হো? পুরানো নিবন্ধে মাছ ধরা সম্পর্কে একটি শব্দ নয়।

যদি ডেটাবেস একের পর এক ডাটাবেসে আসে তবে এটি এর মতো সূচিযুক্ত হতে পারে। তবে সাধারণ সূচিকাগুলির খুব শীঘ্রই বা পরে আপনার ভুল ফলাফল এবং / অথবা ধীর সম্পাদনা হবে ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.