টাইমসারি: এসকিউএল বা নোএসকিউএল?


33

এসকিউএল এবং নোএসকিউএল (বা তাদের traditionalতিহ্যগত পার্থক্য) এর মধ্যে সাধারণ পার্থক্যগুলি সম্পর্কে আমি পাত্তা দিই না।

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

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

আমাদের ডেটা সেটটিতে কয়েক মিলিয়ন সময় সিরিজ রয়েছে, যার মধ্যে প্রায় 10% এর মধ্যে প্রতিটি মিলিয়ন মিলিয়ন রেকর্ড রয়েছে। সময় ধারাবাহিকটি স্তরক্রমিকভাবে সংগঠিত হয়: / বাজার / উপকরণ / মান / ফ্রিকোয়েন্সি যেখানে:

  • বাজার হ'ল একটি সিকিওরিটি এক্সচেঞ্জ ইত্যাদি মূলত যন্ত্রের সংগ্রহ, সাধারণত একই রকম যন্ত্র।
  • উপকরণ একটি উপকরণ এটি কোনও সূচক (ব্রেন্ট ক্রুড), একটি ইক্যুইটি (জিগু) ইত্যাদি হতে পারে
  • একটি যন্ত্রের জন্য মান একাধিক ধরণের ডেটা। এটি নিকট, উচ্চ, নিম্ন ইত্যাদি হতে পারে
  • ফ্রিকোয়েন্সি একটি নির্দিষ্ট সময় সিরিজের মানগুলির ফ্রিকোয়েন্সি। সাপ্তাহিক, দৈনিক, মাসিক, টিক, স্বেচ্ছাসেবী ইত্যাদি

কীভাবে ডেটা একটি এসকিউএল ডিবিতে সংরক্ষণ করা হবে? একটি বড় টেবিল (সম্ভবত কোনও কিছুর দ্বারা বিভাজনিত), বাজারে প্রতি এক টেবিল বা উপকরণ, প্রতি সিরিজের জন্য একটি টেবিল।

তুমাকে অগ্রিম ধন্যবাদ.


1
সমস্ত সময়ের সিরিজে একই মেটাডেটা (অর্থাত কলাম) থাকে?
জ্যাক ডগলাস

1
একটি ডাটা গুদাম মত শোনাচ্ছে ... তাই এই দেখুন: stackoverflow.com/q/2684462/27535
gbn

@ জ্যাক-ডগলাস: আপনি কি কলাম-ওরিয়েন্টেড ডেটা স্টোর প্রস্তাব করতে বলছেন?
নিকোলাস

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

2
@ নিকোলাস আপনি কি এসকিউএল সার্ভারের জন্য নতুন হ্যাডোপ সংযোগকারীটি দেখেছেন ? পৃষ্ঠতলে, আপনার দৃশ্যের সাথে মানানসই দেখাচ্ছে।
মার্ক স্টোরি-স্মিথ

উত্তর:


26

সাধারণভাবে, এই জাতীয় কাঠামোযুক্ত ডেটাসেটের জন্য আমি সন্দেহ করি আপনি একটি কাস্টম ডেটা ফর্ম্যাট লিখতে পারেন যা বেশিরভাগ দৈনিক ক্রিয়াকলাপের জন্য দ্রুত ছিল (অর্থাত্ একটি স্বল্প সময়ের মধ্যে একটি ছোট ডেটা টানে)। স্ট্যান্ডার্ড ডিবি সরঞ্জামে স্থানান্তরিত হওয়ার সুবিধাটি অতিরিক্ত কিছু ক্ষেত্রে সম্ভবত যেমন অ্যাডহক প্রশ্নাবলী, একাধিক অ্যাক্সেস, প্রতিলিপি, প্রাপ্যতা ইত্যাদি etc. একটি মান ভিত্তিক ডেটা স্টোর বজায় রাখতে সহায়তা নেওয়া আরও সহজ।

যদি সেই ডেটা সঞ্চয় করার জন্য আমাকে কোনও ডাটাবেস সেট আপ করতে বলা হয়, তবে আমি নিম্নলিখিতগুলি করতাম:

প্রস্তাবিত স্কিমা

(1) মূল ডেটা পৃথক টেবিলের অসংখ্য (1000 এর) মধ্যে রাখা হয়েছে, যার প্রতিটিটিতে দুটি কলাম রয়েছে:

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

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

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

(২) অ্যাপ্লিকেশন দ্বারা প্রয়োজনীয় হিসাবে মেটা ডেটা পৃথক সারণীতে সংরক্ষণ করা হয় :

মেটাডেটা ট্র্যাক রাখতে একটি অতিরিক্ত টেবিল বা টেবিলের সেট প্রয়োজন is এই টেবিলগুলিতে বিনিময়, উপকরণ, মান, ফ্রিকোয়েন্সি, তারিখের সীমা, প্রোভেন্যান্স (ডেটা কোথা থেকে এসেছে) এবং আরও আপনার যে কোনও কিছুর তথ্য থাকবে। এগুলি ডেটা টেবিলের নামগুলিতে ম্যাপ করা হয়।

যদি পর্যাপ্ত ডেটা থাকে তবে এই অনুসন্ধানটি আসলে একটি টেবিলের নাম এবং ডাটাবেসের নাম সরবরাহ করতে পারে, যা একরকম স্ব-বাস্তবায়িত ডেটা শ্যাডিংয়ের অনুমতি দেয় (যদি শব্দটির সঠিক ব্যবহার হয়)। তবে আমি তা রিজার্ভে রাখব।

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

সুবিধাদি:

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

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

অসুবিধা:

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

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

বিবেচ্য বিষয়:

  • আপনার সময়ক্ষেত্রে গোল করার বিষয়ে সাবধানতা অবলম্বন করুন। আপনি নিজের মানগুলি যথেষ্ট পরিমাণে যোগ দিতে (উপযুক্ত হলে) সক্ষম করতে চান তবে সংক্ষিপ্ত হওয়ার পক্ষে যথেষ্ট সুনির্দিষ্ট।

  • সময় অঞ্চল এবং দিবালোক সঞ্চয়ের সময় সম্পর্কে সতর্ক থাকুন। এগুলি পরীক্ষা করা শক্ত। আমি ডেটা স্টোরটিতে একটি ইউটিসি প্রয়োজনীয়তা প্রয়োগ করব (যা আমাকে অজনপ্রিয় করতে পারে) এবং অ্যাপ্লিকেশনটিতে রূপান্তরগুলি পরিচালনা করবে।

প্রকারভেদ:

কিছু বিবেচনা যা আমি বিবেচনা করেছি তা হ'ল:

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

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

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

এই ফর্ম্যাটটি সম্পর্কে অতিরিক্ত আলোচনার জন্য বিভিন্ন উত্তর দেখুন: মাইএসকিউএল-এ অনেক বেশি কলাম

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

প্রায় 2/3 স্টোরেজ এখন স্বাভাবিককরণ কলামগুলির সাথে গ্রাস করা হয়, সুতরাং এটি প্রচুর ডিস্কের স্থান ব্যবহার করবে।

দ্রুত সঙ্গতিপূর্ণ, একক সত্তা প্রশ্নের জন্য আপনি একটি প্রাথমিক কী অর্ডার (ডেটাবিড, টাইমস্ট্যাম্প) ব্যবহার করতে পারেন। বা, আপনি দ্রুত সন্নিবেশগুলির জন্য (টাইমস্ট্যাম্প। ডেটাডিড) এর একটি প্রাথমিক কী অর্ডার ব্যবহার করতে পারেন।

যাইহোক, এই বৈচিত্রগুলি বিবেচনা করার পরেও, আমার পরবর্তী বিকাশের জন্য আমার পরিকল্পনাটি প্রচুর টেবিল, প্রতিটি দুটি কলাম। এটি, বা পদ্ধতিটি শীঘ্রই আমার চেয়ে আরও জ্ঞানী কেউ পোস্ট করবেন :)।


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

ডিবিএ পরামর্শদাতারা একটি মোষে এসকিউএল সার্ভার ইনস্টলেশন লক্ষ্য করে কাজ করার সময়, আমি একটি বিগডাটা সেটআপ পরীক্ষা করে এগিয়ে যাব।
নিকোলাস

এটি হতে পারে এটি একটি ভাল সমাধান তবে আসল "সময় সিরিজ" অ্যাপ্লিকেশনটির "ডেটা জুম ইন ডেটা" কার্যকারিতা সমর্থন করা উচিত এবং সেখানে ডাটাবেস এতে সহায়তা করতে পারে না। টাইম সিরিজের ডাটাবেসগুলি চালাক "জুম ইন" এবং "জুম আউট" সম্পর্কে আরও বেশি are
রোমান পোক্রভস্কিজ

1

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


2
আপনি মংগোর সময় সিরিজটি কীভাবে সংরক্ষণ করবেন? প্রতিটি নথি একটি টাইম সিরি হয়? বা একটি নির্দিষ্ট টাইমস্ট্যাম্পের মান?
রকসায়েন্স

অ-পর্যায়ক্রমিক এমনকি সাময়িক উপাত্তের জন্য দক্ষতার সাথে এটি করার জন্য, ডেটার কয়েকটি অংশ প্রাক-বরাদ্দ করা ভাল। প্রতিটি অংশ হ'ল কিছু পরিমাণ পরিমাণ বুককিপিং ডেটা, আপনার মানগুলির জন্য নির্দিষ্ট আকারের একটি অ্যারে এবং আপনার সময়ের জন্য স্থির আকারের একটি অ্যারে সহ একটি দস্তাবেজ। তারপরে আপনি সিরিজের জন্য আপনার মেটাডেটা একটি পৃথক নথিতে সংরক্ষণ করবেন। এই মেটাডেটা ডকুমেন্টে, একটি ছোট নেস্টেড ডকুমেন্ট বজায় রাখুন যা আপনার ডেটা বিভাগগুলির জন্য বুককিপার হিসাবে কাজ করবে, যেমন বর্তমান অ্যারে সূচক এবং ট্র্যাক্ট _ আইডি ট্র্যাক করবে।
আরওয়াইএস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.