জটিল ডেটা অ্যাক্সেস / ম্যানিপুলেট করার সময়, এটি অনেক ছোট ছোট টুকরো বা একটি বড় অংশে সংরক্ষণ করা ভাল?


11

আমি একটি ওয়েব অ্যাপ তৈরি করছি যা মোটামুটি জটিল ডেটা: গিটারের ট্যাবগুলি পরিচালনা করে।

    As a reference, guitar tabs look like this:
Eb|-------------------------------------------------------------------------|
Bb|-------------------------------------------------------------------------|
Gb|--5-5-5-5----------------------------------------------------------------|
Db|--5-5-5-5--3-3-3-3--7-7-7-7--5-5-5-5--2-2-2-2--3-3-3-3--2-2-2-2--5-5-5-5-|
Ab|--3-3-3-3--3-3-3-3--7-7-7-7--5-5-5-5--2-2-2-2--3-3-3-3--2-2-2-2--5-5-5-5-|
Eb|-----------1-1-1-1--5-5-5-5--3-3-3-3--0-0-0-0--1-1-1-1--0-0-0-0--3-3-3-3-|

পারফরম্যান্সের জন্য এই ডেটাটিকে বড় অংশ হিসাবে সঞ্চয় করা, বা এটি ভেঙে "নোট দ্বারা নোট" ভিত্তিতে সংরক্ষণ করা আরও দক্ষ হবে?

As a use case:
User changes first chord from:       to:
                         Eb|---   Eb|---
                         Bb|---   Bb|---
                         Gb|--5   Gb|--4
                         Db|--5   Db|--4
                         Ab|--3   Ab|--2
                         Eb|---   Eb|---

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


2
কিসের জন্য ভাল? স্থান সংরক্ষণ করছেন? সিপিইউ শক্তি? আই? অন্যকিছু?
ওবেদ

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

আপনি কী জন্য অনুকূলিত করছেন তা যদি আপনি না জানেন তবে আমরা কীভাবে উত্তর দিতে পারি? কথাটি হ'ল - প্রথমে এটি তৈরি করুন, আপনার যদি নির্দিষ্ট সমস্যা থাকে তবে সেগুলি কীভাবে সাজানোর তা জিজ্ঞাসা করুন।
ওবেদ

12
ডাটাবেসগুলি তৈরি করার আগে আপনি কি ডিজাইন করেন না? আমার প্রশ্নটি একটি ডাটাবেস ডিজাইন করার বিষয়ে। সমস্যা সমাধানের জন্য নয়। আমি এখনও ডিবাগিং পর্যায়ে নেই, এবং আমি থাকলেও এটি প্রোগ্রামারগুলিতে নয়, স্ট্যাকওভারফ্লোতে যাবে। প্রায়শই জিজ্ঞাসিত প্রশ্নাগুলি: প্রোগ্রামারগণ অ্যালগরিদম এবং ডেটা স্ট্রাকচার ধারণা, নকশার নিদর্শন, সফ্টওয়্যার আর্কিটেকচার, সফটওয়্যার ইঞ্জিনিয়ারিং ... কভার সমস্যার সমাধান নয় covers
গ্যাবে উইলার্ড

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

উত্তর:


8

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

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


5

সাধারণত বললে, আরও সাধারণীকরণ বেশ কয়েকটি কারণে ভাল:

  1. তথ্যের কম সদৃশতা, একটি ছোট দৈহিক ডাটাবেসের আকারের দিকে নিয়ে যায়।
  2. আরও ভাল ডেটা অখণ্ডতা - আপনি নির্দিষ্ট প্রয়োজনীয়তা প্রয়োগ করতে বিদেশী কী ব্যবহার করতে পারেন।
  3. সহজ আপডেট কোড, যা আপনি চিহ্নিত করেছেন।
  4. উপাত্তের উপগ্রহে আরও সূচীযোগ্য অ্যাক্সেসের রুট।

অসুবিধাগুলি ( ভালভাবে এখানে বর্ণিত ) এর মধ্যে রয়েছে:

  1. সাধারণীকরণ স্থান বাঁচায়, তবে স্থানটি সস্তা।
  2. সাধারণীকরণ আপডেটগুলি সহজতর করে, তবে পঠনগুলি আরও সাধারণ।
  3. পারফরম্যান্স কম-সাধারণীকরণযোগ্য স্কিমার সাথে সাধারণত আরও ভাল।

আমি আরও একটি সাধারণ নকশা দিয়ে শুরু করার পরামর্শ দেব এবং যদি আপনি পারফরম্যান্সের সমস্যায় পড়ে থাকেন তবে কেবল ডেনারমালাইজিং বিবেচনা করুন।


গিটার ট্যাব ডেটাবেস, সরলতা, ধারাবাহিকতা এবং অখণ্ডতা ট্রাম্প কর্মক্ষমতা সঙ্গে। সুতরাং আমি যে সাধারণ নরমালাইজড স্কিমাটি নিয়ে আসতে পারলাম তা নিয়ে যেতে চাই।
9:54

2

আপনার স্টোরেজটির সাথে কাজ করা সবচেয়ে সহজ এবং শক্ত করার পক্ষে যথেষ্ট করুন hard যুক্তিসঙ্গতভাবে সাধারণীকৃত স্কিমা সহ যান। এমন একটি স্কিমা নিয়ে যান যা সম্ভব হলে আপনার প্রথম প্রকাশে আপনার প্রয়োজনের ব্যতীত অন্য ব্যবহারগুলিকে অন্তর্ভুক্ত করে না।

তাহলে সব আপনি প্রয়োজন একটি নির্দিষ্ট গানের জন্য ট্যাব দেখানোর জন্য, আপনি একটি ডকুমেন্ট ভিত্তিক ডিবি (MongoDB মত) মধ্যে 6-tuples প্রচুর সংরক্ষণ তাদের এক ডকুমেন্ট হিসেবে আনার সময় পারে।

কোনও আরডিবিএমএসে, আমি এটি একইভাবে, এই জাতীয় টেবিলে সঞ্চয় করতাম:

table tab_column (
  song_id integer not null foreign key references song(id),
  ordinal integer not null, -- position in the tabulature
  s1 number(2), -- position on 1st string
  ...
  s6 number(2),
  primary key(song_id, ordinal)
)

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

select * from tab_column
where song_id = :song_id
order by ordinal;

ব্যবহার করে limitএবং offset, আপনি একটি গানের অংশগুলি দেখাতে পারেন।

পরে tab_columnযদি আপনি কোনও জ্যা চিনতে পারেন তবে একটি ছকটির সাথে লিঙ্ক করা সহজ হবে যা নামকৃত জ্যাঁদের তালিকাভুক্ত করে।

এটি সম্ভবত সহজতম স্কিমা; আমি এটি দিয়ে শুরু করব।

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