এক্সএমএল ডেটা টাইপ কখন ব্যবহার করবেন


12

আমি একটি প্রকল্পে একটি ডাটাবেস তৈরি করার জন্য দায়বদ্ধ। আমাদের এমন ক্ষেত্র রয়েছে যা খুব কমই একটি মান (প্রতি 10,000 রেকর্ডের মধ্যে 1) পেতে চলেছে এবং আমি এটি ডাটাবেসে সংরক্ষণের সর্বোত্তম উপায়ে কাজ করার চেষ্টা করছি।

আমি যতদূর দেখতে পাচ্ছি আমার কাছে 3 টি বিকল্প রয়েছে:

  1. প্রতিটি অতিরিক্ত মানের জন্য সারণীতে একটি কলাম যুক্ত করুন
  2. একটি লিঙ্কযুক্ত টেবিল যুক্ত করুন যা মূল সারণিকে উল্লেখ করে এবং কেবলমাত্র যেখানে আমাদের কোনও মূল্য সঞ্চয় করতে হবে সেখানে রেকর্ড রয়েছে
  3. মূল টেবিলটিতে এক্সএমএল ডেটা টাইপ ব্যবহার করুন এবং এর মধ্যে সমস্ত মান সংরক্ষণ করুন।

অন্য কোন বিকল্প আছে যা আমি বিবেচনা করি নি?

আমি প্রতিটি পদ্ধতির উপকারিতা এবং চেষ্টা করার চেষ্টা করছি। যতদূর আমি বলতে পারি 1 সবচেয়ে সহজ হবে এবং 2 কমপক্ষে স্থানের পরিমাণ নেবে তবে আমি 3 এর জন্য অনেক সংস্থান খুঁজে পেতে লড়াই করছি।


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

আপনি কত অতিরিক্ত ক্ষেত্রের কথা বলছেন? এবং তারা কি একই সত্তার অংশ হতে অনুধাবন করে?
অ্যান্ড্রু বিকারটন

উত্তর:


12

আপনার যা প্রয়োজন তার মতো শব্দগুলি হল স্পর্শকৃত কলাম এবং ফিল্টার করা সূচক এবং বিকল্প 1 টি সহ যান fully এগুলি পুরোপুরি সমর্থিত এবং ডকুমেন্টেড বৈশিষ্ট্যগুলি ঠিক এই দৃশ্যের জন্য।

এসকিউএল সার্ভার ডেটাবেস ইঞ্জিন column কলামের মানগুলির সঞ্চয়স্থানের অনুকূলকরণের জন্য একটি কলাম সংজ্ঞাতে স্পার্স কীওয়ার্ড ব্যবহার করে। সুতরাং, যখন কলামটির মানটি টেবিলের যে কোনও সারির জন্য নুল হয়, মানটির কোনও সঞ্চয়স্থান প্রয়োজন requires

আমি এই দৃশ্যে কোনও এক্সএমএল সমাধানটি ভালভাবে সম্পাদন করতে পারে তা কল্পনা করতে পারি না, এতে রিডানড্যান্ট মেটাডাটার একটি বিশাল ওভারহেড থাকবে এবং এটি অনুসন্ধানে ধীর হবে।


1
আমি মনে করি বিরল কলামগুলিই আমার পরে। আমি প্রত্যাশা করছি যে খুব অল্প পরিমাণে ডেটা সম্ভবত কয়েকটি টেবিলের মুঠোয় কয়েকটি কলামে সঞ্চয় করা হবে।
ম্যাথু স্টেপলস

আমি নিশ্চিত না যে আমি এই অধিকারটি পড়ছি কিনা, তবে এই লিঙ্ক অনুসারে স্পর্শ কলামগুলি মূলত আমি যা খুঁজছিলাম তার একটি ডাটাবেস বাস্তবায়ন 3 যাইহোক তারা না? blog.sqlauthority.com/2008/07/14/…
ম্যাথু

যদি এটি অভ্যন্তরীণভাবে এর মতো প্রয়োগ করা হয় (এবং আমি এটি জানি না যে এটি কেবল কারও ব্লগ) তবে আপনাকে কখনই এক্সএমএলকে ডিল করতে বা পার্স করতে হবে না - এটি নিয়মিত সারণীর মতো হুবহু আচরণ করবে (কোনও বিধিনিষেধ সহ) ডেটাটাইপগুলিতে)
গাইউস

5
  1. এসকিউএল সার্ভারে পরিবর্তনশীল দৈর্ঘ্য হলে একটি শনাক্তযোগ্য কলাম কোনও স্থান নেয় না । NULL হওয়ার ঘটনাটি NULL বিটম্যাপে সঞ্চিতফিল্টারড সূচীগুলির সাথে প্রয়োজন হলে আপনি এটি সূচী করতে পারেন যাতে আপনি নাল কলামগুলি উপেক্ষা করেন।

  2. আপনি পয়েন্ট 1 বিবেচনা করলে জটিলতা যুক্ত করে।

  3. না। অনুসন্ধান করা শক্ত, পার্স করা ইত্যাদি: আপনি পরে আফসোস করবেন

এটি আকারের উপরও নির্ভর করে: কয়েক বিলিয়ন সারিগুলির জন্য এটি কি চর (1000) হবে? বা 100k সারিগুলির জন্য টিনিনেন্ট? যদি পরবর্তীকরা 2 পয়েন্টের যুক্ত জটিলতা বিবেচনা করে: এটি মূল্যবান নয়।


আপনার কি এমন একটি রেফারেন্স রয়েছে যে শূন্য একটি কলাম কলামে স্থান নেয় না। আমি সচেতন ছিলাম যে এটি নাল ছিল কিনা তা নাল বিটম্যাপে সঞ্চিত ছিল কিন্তু স্থির দৈর্ঘ্যের ক্ষেত্রগুলির জন্য ভেবেছিলাম যে ডেটাটি এখনও টেবিলের মধ্যে সঞ্চিত রয়েছে। এই মানগুলির জন্য আমি যে ডেটাটাইপটি ব্যবহার করব তা হ'ল অর্থ (তাই 8 বাইট)
ম্যাথু স্টিপলস

1
@ ম্যাথিউ স্টেপলস: আমি বলেছিলাম যে পরিবর্তনশীল দৈর্ঘ্য ইতিমধ্যে কোনও স্থান নেয় না। এবং রেফারেন্সের জন্য sqlskills.com/BLOGS/PAUL/category/On-Disk-Structures.aspx#p41 এই 8 বাইটের জন্য সারি কীভাবে থাকতে পারে?
জিবিএন

এই মুহুর্তে আমরা 500,000 সারিতে আছি তবে আমরা সঠিকভাবে বেঁচে থাকার পরে আমরা সপ্তাহের দিন প্রতি 1 মিলিয়ন হারে প্রসারিত হব (আশা করি)।
ম্যাথু স্টেপলস

3

এসকিউএল সার্ভার ২০০৮ এর সাথে আপনার কাছে স্পার্স কলামগুলি ব্যবহার করার অতিরিক্ত বিকল্প রয়েছে যা আপনি উল্লেখ করেছেন এমন পরিস্থিতির জন্য বিশেষভাবে ডিজাইন করা হয়েছে।

তাদের অতিরিক্ত সুবিধা রয়েছে যে আপনি তাদেরকে এক্সএমএল COLUMN_SET ব্যবহার করে সম্মিলিত এক্সএমএল অবজেক্ট হিসাবে দেখতে পারেন বা তাদের পৃথকভাবে উল্লেখ করতে পারেন এবং তারা একটি দুর্দান্ত স্থান সঞ্চয় সরবরাহ করে।

আরো বিস্তারিত জানার জন্য নিম্নলিখিত ব্লগ নিবন্ধ পরীক্ষা করে দেখুন: http://www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-Sparse-columns-and-XML-COLUMN_SET.aspx


-4

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


3
-1 এটি সত্য যে "টেবিলগুলি ব্যবহার করবেন না" একটি বিকল্প , উত্তরটি স্পষ্টতই টেবিল কাঠামোর বিরুদ্ধে রেন্টকে উল্লেখ করছে এবং আসলে কোনও সহায়ক উত্তর জমা দিচ্ছে না।
অ্যান্ড্রু বিকার্টন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.