কী মান কী বিন্যাসে 3 মিলিয়ন রেকর্ড সংরক্ষণ করবেন?


10

আমাদের 3 মিলিয়ন পণ্যের প্রাথমিক তথ্য সংরক্ষণ করতে হবে। বর্তমানে তথ্যটি এক 180 এমবি সিএসভি যা ত্রৈমাসিকভাবে আপডেট হয়।

প্রতিদিন প্রায় 30,000 টি ক্যোয়ারী থাকবে, তবে ক্যোয়ারীগুলি কেবল একটি খুব সাধারণ কী স্টোর। আমাদের কেবল পণ্য আইডি সন্ধান করতে হবে এবং বাকী তথ্য প্রদর্শন করতে হবে (যা সব এক রেকর্ডে থাকবে)।

এটি ওয়েবের জন্য, তাই দ্রুত পারফরম্যান্স সমালোচিত।

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

উত্তর:


16

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

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

আপনি যা করেন না কেন, এই তিন মিলিয়ন ফাইল তৈরি করবেন না । আমরা এখানে ইতিমধ্যে বেশ কয়েকটি প্রশ্ন দেখেছি যে এতগুলি ফাইল তৈরির ফলে সমস্যার সৃষ্টি হয়েছে।


13

আপনি ডেডিকেটেড কী-মান ধরণের নো এসকিউএল ডাটাবেস ব্যবহার করতে পারেন যা এই ধরণের কাজের জন্য অনুকূলিত । একটু দেখো:

  • রেডিস - রেডিস একটি ওপেন সোর্স, উন্নত কী-মান স্টোর। কীগুলিতে স্ট্রিং, হ্যাশ, তালিকা, সেট এবং সাজানো সেট থাকতে পারে বলে এটি প্রায়শই ডেটা স্ট্রাকচার সার্ভার হিসাবে পরিচিত।
  • মেমক্যাচডিবি - মেমক্যাচডিবি অবিরামের জন্য ডিজাইন করা একটি বিতরণযোগ্য কী-মান স্টোরেজ সিস্টেম is
  • অন্যরা (এই জাতীয় তালিকার একটি এখানে পাওয়া যাবে: http://nosql-datedia.org/ )

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


আমরা রেডিস ব্যবহার করতে পারি, তবে আপনি কি মনে করেন যে এটি পি জিতে 2 জিগ র‌্যামের সাথে কাজ করবে?
ফিল

@ ফিলিল আপনার সিএসভি ফাইলটি 180MB এর কাছাকাছি বিবেচনা করে - ভাল থাকতে হবে। যদিও আমরা এটি প্রায় 200 কে রেকর্ড সহ একটি প্রকল্পে (কেবলমাত্র একবার মাত্র একবারে) ব্যবহার করেছি এবং সার্ভারে 8 জিবি র‌্যাম ছিল তাই আমার তুলনা করা কঠিন it
LazyOne

6

এবং এখন সম্পূর্ণ ভিন্ন কিছু:

প্রদত্ত:

  • 180 এমবি / 3 এম পণ্যগুলি = গড়ে 62 বাইট / পণ্য।
  • 30,000 ক্যোয়ারী প্রতি দিন = প্রতি সেকেন্ডে 0.34 টি ক্যোয়ারী
  • ত্রৈমাসিক আপডেট হয়েছে = মূলত স্থিতিশীল ডেটা

বক্স সমাধানের বাইরে:

প্রতিটি পণ্যকে একটি টিএক্সটি সংস্থান রেকর্ড হিসাবে ফেলে দিন এবং এটি ডিএনএসে সঞ্চয় করুন, যেমন:

$origin products.example.com.

product_1_name IN TXT "product 1 description"
product_2_name IN TXT "product 2 description"
...
product_3000000_name IN TXT "product 3000000 description"

উপকারিতা:

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

কেন এটি খারাপ ধারণা হতে পারে তার কারণগুলি:

  • আপনাকে ডেটা অনুসন্ধান করতে হবে (ডিএনএস খাঁটি কী / মান অনুসন্ধান)
  • আপনার ডেটা লুকিয়ে রাখতে হবে (ডিএনএসের কোনও গোপনীয়তা নেই)

1
আমি যদি মৌলিকতার জন্য বোনাস পয়েন্ট দিতে পারি তবে এটি আমার ভোট পাবে। আমি বলব না যে ডিএনএস মোটেও নির্ভরযোগ্য, যেমন একটি সাধারণ হোম নেটওয়ার্কের মতো এটি কাজ করে তবে যাদু বলে মনে হয় এবং যদি এটি না ঘটে তবে একটি অভিশাপ।
মার্টিন ভিলকান্স 21

1
আমি কৌতূহলী. আমি আসলে এই ধারণাটি পছন্দ করি তবে আমার জন্য, আমি কাউচডিবি
টম ও’কনর

কিছু মন্টি পাইথন দেখছেন?
মার্ক হেন্ডারসন

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

ক্যাপ্টেন হিন্সসাইট একটি শব্দ: ব্লকচেইন
দতাশামান

4

মাইএসএএমএল এবং কিছু ভাল সূচকযুক্ত মাইএসকিউএল এটির জন্য উপযুক্ত বলে মনে হচ্ছে। অবশ্যই অন্যান্য প্রচুর বিকল্প রয়েছে, তবে মাইএসকিউএল যে কোনও বাণিজ্যিক ওয়েব হোস্টে খুব বিস্তৃত (সর্বজনীনভাবে নয়) সমর্থিত। গতি প্রয়োজন উপর নির্ভর করে, memcached এছাড়াও এ খুঁজছেন মূল্য হতে পারে , কিন্তু প্রতিটি কী / মান জোড়া আকার জেনে মেমরি তাদের 3 মিলিয়ন সংরক্ষণকারী, একটি 180Mb CSV ফাইল চেয়ে একটি এমনকি আরো খারাপ ধারণা হতে পারে (OH অপেক্ষা করুন, এটা একটি 180 এমবি সিএসভি ফাইল, তাই আমরা জানি যে সেগুলি কত বড় They এগুলি অবশ্যই খুব ছোট জোড়া হওয়া উচিত, তাই মেমচেড আরও ভাল হতে পারে)।

আপনি 3 মিলিয়ন স্ট্যাটিক এইচটিএমএল ফাইল চান না , এটি আপনার ফাইল সিস্টেমকে খারাপভাবে ক্ষতি করবে। এমনকি একটি 3-লাইনের সিএসভি, এমনকি এস 3-তেও একই সমস্যা হতে চলেছে। কেউ কোনও ফোল্ডারে 3 মিলিয়ন ফাইল চায় না।


এগুলি বেশ ছোট জোড়া ... এটি মূল্য, উত্পাদন তারিখ, গুদাম সংখ্যা ইত্যাদির মতো খুব বেসিক ডেটা 10 কলামেরও কম Less সুতরাং আপনি কি মনে করেন যে মাইএসকিউএল হ'ল উপায়? যে সার্ভারটি চলতে চলেছে তা হল একটি পি 4 যা 2 জিগ র‌্যামের সাথে রয়েছে- আমি মনে করি এটি ভাল হওয়া উচিত?
ফিল

@ ফিল - So you think MySQL is the way to go, really?- না, সত্যই নয়, তবে এটি অত্যন্ত নমনীয় এবং আমি উল্লেখ করেছি, প্রায় সর্বজনীনভাবে সমর্থন করা। তবে LazyOne উপরে কিছু ভাল বিকল্প পোস্ট করেছে। আমি নোএসকিউএল শব্দটি মনে করতে পারিনি, তবে এটি আমার মস্তিষ্কে কোথাও ভেসে উঠছিল
মার্ক হেন্ডারসন

4

আপনি বার্কলে ডেটাবেস ব্যবহার করতে পারেন যা ঠিক এই ধরণের কাজ করে, এমনকি পার্ল 5 এর ভোর থেকে হিপ না থাকলেও। বার্কলে কেবল মূল মান জোড়কে সমর্থন করে এবং আপনি পুরো ডিবিটিকে একটি হ্যাশের সাথে বেঁধে রাখেন এবং এটিতে এটি অ্যাক্সেস করেন।

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


2
বিডিবি পুরানো কুল তবে এই পরিস্থিতির জন্য খুব কার্যকর এবং উপযুক্ত।
ওম্বল

বার্কলি ডিবি এন.ইউইকিপিডিয়া.আর.উইকি / স্লিপাইক্যাট_লাইসেন্সের জন্য লাইসেন্স সম্পর্কে সাবধান থাকুন, এটির জন্য কেবলমাত্র ডিবি অংশ নয়, সমস্ত উত্স কোড উপলব্ধ করা দরকার।
ওল্ফম্যানজেএম

4

আপনি আপনার প্রশ্নটিকে অ্যামাজন এস 3 হিসাবে পতাকাঙ্কিত করেছেন।

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

এটি এটির জন্য কোনও প্লাগ নয়, তবে বিশেষত যদি আপনি অ্যামাজন ক্লাউড পরিষেবাগুলি ব্যবহার করার পরিকল্পনা করে থাকেন তবে তা দেখার মতো।

এসডিবি ডেটা মডেলটি একটি স্প্রেডশিটের সাথে সাদৃশ্যযুক্ত।

এটির আরও তথ্যের জন্য এখানে দেখুন: http://aws.amazon.com/simpledb/ এবং ডেটা মডেল: http://docs.amazonwebservices.com/AmamaSSmpleDB/latest/DeveloperGuide/


সিম্পলডিবি ব্যয়বহুল। বেদনাদায়ক তাই, অনেক ক্ষেত্রে।
টম ও'কনর

1

যদিও 180mb ডেটা সহজেই যে কোনও রিলেশনাল ডাটাবেস দ্বারা পরিচালনা করা যায়, তবে আমি মঙ্গোডিবি ( http://www.mongodb.org/) এর জন্য অত্যন্ত সুপারিশ করব) মাইএসকিউএল, রেডিস, মেমক্যাচডিবি এবং অন্যান্য সরল কী-মান স্টোর বা রিলেশনাল ডাটাবেসগুলির উপরে। কারণটি হ'ল এই ধরণের সমস্যার জন্য মংডোডিবি হ'ল দ্রুত, সবচেয়ে এক্সপ্রেসিভ সিস্টেম যা কোনও স্কিমার বিধিনিষেধ ছাড়াই সুপার ফাস্ট গতিশীল আপডেটের অনুমতি দেয়, তাই আপনার ডকুমেন্টগুলিতে যদি সেগুলি পছন্দ হয় তবে বিভিন্ন ফর্ম্যাট থাকতে পারে। আমি অন্য দিন গার্ডিয়ান.কম.উকের একটি উপস্থাপনায় ছিলাম এবং তারা সমস্ত সম্পর্কিত ডেটাবেসগুলিকে নিষিদ্ধ করার এবং তাদের সংবাদ পরিবেশন করার জন্য মঙ্গোডিবিকে একচেটিয়াভাবে ব্যবহার করার নীতিগত সিদ্ধান্ত নিয়েছে। আপনি কীভাবে তাদের ওয়েবসাইটটি দ্রুত এবং 1995 সাল থেকে অনলাইনে (ইউকেতে প্রাচীনতম অনলাইন পত্রিকা) তা অনুভব করতে পারেন। তারা ইতিপূর্বে রিলেশনাল ডাটাবেসের কারণে সব ধরণের বাধাও পেরেছে। 180 এমএম এর জন্য মঙ্গোডিবি মেমরি থেকে সমস্ত কিছু সরবরাহ করবে, সুতরাং সাব-এমএস লোডিংয়ের সময়টি সম্ভবত ঘটবে।


0

প্রতিদিন প্রায় 30,000 টি ক্যোয়ারী থাকবে, তবে ক্যোয়ারীগুলি কেবল একটি খুব সাধারণ কী স্টোর। আমাদের কেবল পণ্য আইডি সন্ধান করতে হবে এবং বাকী তথ্য প্রদর্শন করতে হবে (যা সব এক রেকর্ডে থাকবে)।

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

আমি সাহস করে বলি যে অনেক কিছুই ভাল করবে। আপনার বোঝা 30000 ক্যোয়ারী / দিনের অর্থ হ'ল (ধরে নিচ্ছেন যে আপনার বোঝাটি সারা দিন স্থির থাকে) প্রতি 20 সেকেন্ডে আপনার একক জিজ্ঞাসা রয়েছে; এটা খুব খারাপ না.

আমি প্রযুক্তিটিতে বাস্তবায়নের পরামর্শ দিচ্ছি যা আপনি প্রথমে সবচেয়ে বেশি পরিচিত এবং এটি পরিমাপ করুন এটি প্রকৃতপক্ষে সিস্টেমের বাধা whether


0

এটি করার সর্বোত্তম উপায়টি আপনার ডেটা এবং কোয়েরির মান এবং প্রকৃতির উপর নির্ভর করে। প্রারম্ভিকদের জন্য, পণ্যগুলির জন্য একক টেবিলের 180MB ডেটা কোনও সমস্যা নয়, আপনি যেভাবেই দেখুন look এবং প্রতিদিন 30k ক্যোয়ারী একটি সমস্যা এমনকি কম হয়। সঠিকভাবে কনফিগার করা ডাটাবেস সহ, কোনও পুরানো ডেস্কটপ এই লোডটি পরিচালনা করতে পারে।

অন্যরা ইতিমধ্যে আপনার দুটি প্রধান বিকল্প, মাইএসকিউএল বা একটি নোএসকিউএল ডাটাবেসটি নির্দেশ করেছে।

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

যদি উপস্থিতি এবং ডেটা ধরণের ক্ষেত্রে বৈশিষ্ট্যগুলি বিস্তৃতভাবে পরিবর্তিত হয়, তবে আপনি একটি নোএসকিউএল ডাটাবেস ব্যবহার করা আরও ভাল হতে পারেন, যা এই দৃশ্যটি traditionalতিহ্যগত এসকিউএল ডেটাবেসগুলির চেয়ে বেশি দক্ষতার সাথে পরিচালনা করে।

পারফরম্যান্স সম্পর্কে: আমি এর আগে একটি ই-কমার্স প্রতিষ্ঠানের হয়ে কাজ করেছি, যেখানে দীর্ঘদিন ধরে ওয়েবসাইটটি একটি মাইএসকিউএল সার্ভারের ডেটা সরবরাহ করা হয়েছিল। এই সার্ভারটিতে 2 জিবি র‌্যাম ছিল, মোট ডাটাবেস প্রায় ছিল was 5 গিগাবাইট আকারে এবং শীর্ষের লোডের নীচে সার্ভার প্রতি সেকেন্ডে কয়েক হাজার কোয়েরি পরিচালনা করে। হ্যাঁ, আমরা ক্যোয়ারী অপটিমাইজেশন অনেক করেছি, তবে এটি অবশ্যই কার্যকর।

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