জেএসএনবি ইনডেক্সিং বনাম হস্টোর সহ


28

এই পর্যায়ে যতটা সম্ভব অনুমান করা যায় (ওয়েব অ্যাপটি আসলে কীভাবে বিকশিত হয় সে সম্পর্কে) আমি ডাটাবেস ডিজাইনের বিষয়ে সিদ্ধান্ত নেওয়ার চেষ্টা করছি।

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

আফাইক (সংশোধন করতে নির্দ্বিধায়):

  1. সাধারণত পোস্টগ্রিসে হস্টোর অন্যান্য ডেটা ধরণের চেয়ে ভাল পারফরম্যান্স হিসাবে পরিচিত। ফোসডেম পিজিডিএইয়ের এই উপস্থাপনাটির কিছু আকর্ষণীয় পরিসংখ্যান রয়েছে (স্লাইডগুলির দ্বিতীয়ার্ধে) https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf

  2. হস্টোরের সাথে একটি সুবিধা হ'ল দ্রুত সূচক (জিআইএন বা জিআইএসটি)। তবে জেএসওএনবির সাথে জিআইএন এবং জিএসটি ইনডেক্সিংও জেএসওএন ডেটাতে প্রয়োগ করা যেতে পারে।

  3. ২ য় কোয়াড্রেন্টের পেশাদারদের এই ব্লগটি বলেছে "এই মুহুর্তে সমস্ত নতুন অ্যাপ্লিকেশনগুলিতে জেসনবের সাথে hstore ব্যবহারের প্রতিস্থাপন করা ভাল" (শেষ পর্যন্ত স্ক্রোল করুন): http://blog.2ndquadrant.com/postgresql-anti-patterns- অপ্রয়োজনীয় -jsonhstore-ডাইনামিক-কলাম /

সুতরাং আমি নিম্নলিখিত বিষয়ে সিদ্ধান্ত নিতে চাই:

  1. ডেটাটির মূল (কাঠামোগত) অংশের জন্য: এটি কয়েকটি রিলেশনাল টেবিলের মধ্যে থাকা উচিত (অনেকগুলি কলামের সাথে তুলনামূলকভাবে বড়), বা এটি হস্টোর ব্যবহার করে বেশ কয়েকটি কী-মান স্টোর হওয়া উচিত?
  2. অ্যাডহক (ব্যবহারকারীর অবদান / অবকাঠামোগত) ডেটার জন্য, এটি জেএসএন বা হস্টোরের অ্যাডহক কী ভ্যালু স্টোরগুলিতে থাকা উচিত (মূল রিলেশনাল টেবিলগুলির মধ্যে একটিতে কীগুলি সংরক্ষণ করা উচিত)?

7
যোগদান ব্যয়বহুল নয়। কে বলেছে তোমাকে? যেহেতু মূলত রিলেশনাল ডাটাবেসের পুরো ধারণাটি যোগ দেয় চারপাশে ঘোরাফেরা করে (ব্যবহারিক দিক থেকে), এই পণ্যগুলিতে যোগদানের ক্ষেত্রে খুব ভাল। ভাবনার স্বাভাবিক উপায়টি যথাযথভাবে সাধারণ কাঠামোগুলি দিয়ে শুরু হয় এবং অভিনব ড্যানোরালাইমাইজেশন এবং অনুরূপ স্টাফগুলিতে যায় যখন কার্যক্ষমতাটি পড়ার দিক থেকে সত্যই প্রয়োজন হয় needs JSON(B)এবং hstore(এবং EAV) অজানা কাঠামোর সাথে ডেটার জন্য ভাল।
dezso

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

4
@ ইয়েজচ বাস্তবিকভাবে আমি নিশ্চিত যে যে কোনও ধর্মীয় পাঠকে নৃশংসতার ন্যায্যতা হিসাবে ব্যবহার করা যেতে পারে (যেমন ইতিহাস জুড়ে নাটকীয়ভাবে দেখানো হয়েছে) ঠিক তেমন কিছু প্রমাণ করার জন্য ইন্টারনেটে একটি উত্স রয়েছে। আপনি যত কম ব্যয় করেন কম কাজ এটি সত্য, তবে সর্বদা কিছুটা বাণিজ্য বন্ধ থাকে
এরিক

4
@ ইয়েজেছ: পাঠ্য-ভারী ক্রিয়াকলাপের জন্য যোগ দেওয়া এড়ানো গুরুত্বপূর্ণ, যেখানে আপনি ডেটা অ্যাক্সেসের ধরণটি আগেই জানেন এবং যাতে আপনার প্রয়োজনীয় সমস্ত ডেটা নিরাপদে একক সারিতে রাখতে পারেন। যাইহোক, এটি অন্যান্য যোগদানগুলিকে সম্ভাব্য আরও ব্যয়বহুল করে তোলে । কে বলবে আপনাকে বিভিন্ন প্রশ্নের উত্তর দেওয়ার জন্য বিভিন্ন উপায়ে ডেটাতে যোগদান করতে হবে না? এখন আমরা কেবলমাত্র সম্পর্কিত তথ্য মডেলিং তত্ত্বের অবতরণ করতে চলেছি ...
ক্রিস

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

উত্তর:


41

রিলেশনাল ডেটাবেসগুলি চারদিকে যোগদানের জন্য ডিজাইন করা হয়েছে এবং সেগুলি ভালভাবে করার জন্য অনুকূলিত হয়েছে।

আপনার যদি কোনও সাধারণ নকশা না ব্যবহার করার উপযুক্ত কারণ না থাকে তবে একটি সাধারণ নকশা ব্যবহার করুন।

jsonbএবং hstoreযখন আপনি কোনও সাধারণীকরণ করা ডেটা মডেল ব্যবহার করতে পারবেন না তখন যেমন জিনিসগুলি যখন ডেটা মডেল দ্রুত পরিবর্তন হয় এবং ব্যবহারকারী সংজ্ঞায়িত হয় তখন এর জন্য জিনিসগুলি ভাল ।

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

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

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

নিখরচায় এবং অ-কাঠামোগত ব্যবহারকারীর দ্বারা অবদানিত ডেটার জন্য, jsonb ব্যবহার করুন। এটি hstore পাশাপাশি সঞ্চালন করা উচিত, তবে এটি আরও নমনীয় এবং এর সাথে কাজ করা সহজ।

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


অনেক ধন্যবাদ ক্রেগ, এখন আমি আরও ভাল বোঝার আছে এবং আমি কি করতে জানি। একটি অনুসরণ প্রশ্ন: আমি যদি দুটি স্তম্ভ বিন্যাসে (পোস্ট_আইডি এবং ব্যবহারকারী_আইডি, পছন্দগুলির জন্য ) পছন্দ বা অনুসরণকারীদের মতো কিছু সঞ্চয় করে রাখি , তবে দুটি কলাম, বা একটি ভবনের সাথে একটি সম্পর্কিত টেবিল ব্যবহার করা ভাল? (এটিকে একটি নতুন প্রশ্নে পরিণত করতে আমার কোনও আপত্তি নেই)
Yogesch

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

hstoreঅবচয় করা হয়। ব্যবহার jsonb
বিপদ 89

2
@ বিপদ ৯৯ আসলে, এটি আনুষ্ঠানিকভাবে হ্রাস করা হয়নি, যদিও আমি মনে করি না যে এটি আর জসনবের পক্ষে ব্যবহার করার কোনও কারণ আছে। যা-ই হোক না কেন ... এই জাতীয় বিন্দুটি অনুপস্থিত। প্রশ্নটি সম্পর্কিত যে মডেল করবেন বা কোনও কাঠামোগত ডেটা টাইপ ব্যবহার করবেন তা নিয়েই।
ক্রেগ রিঞ্জার 15
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.