ডেটা গুদাম: আমি কীভাবে দৈনিক স্ন্যাপশটগুলি জিজ্ঞাসা করতে পারি?


9

আমার কাছে একটি ডাটাবেসের কিছু স্ন্যাপশট রয়েছে যা টাইমসারি নয়। উদাহরণ স্বরূপ:

  • স্ন্যাপশট দিন 1:

    +----+---------------+------------+------------+        
    | ID |     Title     |  Category  |    Date    |
    +----+---------------+------------+------------+
    | 1  | My First Post | helloworld | 2015-01-01 |
    +----+---------------+------------+------------+
    
  • স্ন্যাপশট দিন 2 (একটি নতুন পোস্ট আজ যুক্ত করা হয়েছে):

    +----+----------------+------------+------------+        
    | ID |      Title     |  Category  |    Date    |
    +----+----------------+------------+------------+
    | 1  | My first post  | helloworld | 2015-01-01 |
    | 2  | My second post | other      | 2015-01-02 |
    +----+----------------+------------+------------+
    
  • স্ন্যাপশটের দিন 3 (আজ 2 পোস্ট সরানো হয়েছে):

    +----+---------------+------------+------------+        
    | ID |     Title     |  Category  |    Date    |
    +----+---------------+------------+------------+
    | 1  | My First Post | helloworld | 2015-01-01 |
    +----+---------------+------------+------------+
    

তাই দিনের মধ্যে, টেবিলের একটি সারি স্থির থাকতে পারে এবং নাও থাকতে পারে। এখন, আমাকে এই জাতীয় একটি কোয়েরি ব্যবহার করতে সক্ষম হতে হবে:

SELECT category, COUNT(*) from day1.My_table group by category

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

SELECT category, SUM(cnt) / 30 
from ( 
    SELECT category, COUNT(*) as cnt 
    from day1.My_table 
    group by category 
        UNION ALL SELECT category, COUNT(*) as cnt 
                  from day2.My_table 
                  group by category 
        UNION ALL ... 
        UNION ALL SELECT category, COUNT(*) as cnt 
                  from day30.My_table 
                  group by category
) group by category

আর একটি উদাহরণ, এক মাসে প্রকাশিত পোস্টের সংখ্যা :

SELECT COUNT(distinct id) 
from ( 
    SELECT id 
    from day1.My_table 
    UNION ALL ... 
    UNION ALL SELECT id 
              from day30.My_table
) 

মূলত আমাদের একটি ওজন বিবেচনা করা প্রয়োজন। আমাদের যদি ডে 1 থাকে।মাই_সেবিকা এবং দিন 5.মাই_ টেবিল, প্রতিটি পোস্ট যে দিন 1-এ রয়েছে এবং দিন 5-এ নয়, এটিও গণনা করা হবে যেমনটি ছিল দিন 2,3,4 in দিন 1 ও দিন 5 এর প্রতিটি পোস্ট গণনা করা হবে যেন এটি মাসের প্রতিটি দিনেই থাকে (= পরবর্তী স্ন্যাপশট অবধি)।

সুতরাং আমি যদি> = 6 মাস যাওয়ার দিনে প্রতিদিনের পোস্টের গড় সংখ্যা বিবেচনা করতে চাই, যেখানে আমার কেবল 1 টি স্ন্যাপশট রয়েছে, আমি সেই স্ন্যাপশটে 30 এর ওজন নির্ধারণ করব।

সুতরাং, = 6 মাস আগে একটি ব্যাপ্তির জন্য এক মাসে প্রকাশিত গড় পোস্টটি হ'ল:

SELECT category, SUM(cnt) / 30 
from ( 
    SELECT category, COUNT(*)*30 as cnt 
    from day1.My_table 
    group by category --- Note: I'm not considering the range defined from the user in this example.
) group by category;

মন্তব্যে আরও বলা হয়েছে যে, আমার মতো একটি কোয়েরি করা দরকার:

Select category, AVG(*) 
from [fromRange-toRange].MyTable; 

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

আপনি কী ভাবেন যে মেটা ভাষা ছাড়াই ড্রিলটিতে এটি সম্পন্ন করার কোনও উপায় আছে? আমি এটি একটি পুনরাবৃত্তাকারী ইউডিএফ ব্যবহার করে করব তবে তারা কোয়েরি ফিরে পাবে না।

প্রতিটি স্ন্যাপশটটি 250 গিগাবাইটের বড় এবং আমি এই ডেটাসেটকে অন্যান্য বাহ্যিক ডেটার সাথে তুলনা করতে সক্ষম হতে চাই (এই ডেটাসেটের স্কিমটি আমি আগে জানি না)।

অ্যাপাচি ড্রিলের জন্য কি কোনও সমাধান উপযুক্ত? নাকি এই সমস্যার আর কোনও সমাধান আছে?

এছাড়াও এই সমস্যা সম্পর্কে কোনও মেটা-ভাষা বা কাগজ প্রশংসা করা হয়।

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

অনুসন্ধানের উদাহরণ হতে পারে "সামোপটিক সম্পর্কে কতগুলি পোস্ট ছিল?" সুতরাং এটি সামটোপিক কীওয়ার্ডের জন্য সমস্ত পোস্ট সন্ধান করতে হবে। প্রতিটি স্ন্যাপশটে একই সারি থাকতে পারে বা নাও থাকতে পারে। এছাড়াও দুটি স্ন্যাপশটের একই পোস্ট থাকতে পারে তবে কিছুটা সংশোধন করা হয়েছে।


মনে হচ্ছে আপনার ডেটাতে আপনার একটি শালীন কাঠামো আছে .. আপনি কোনও স্কিম-মুক্ত সমাধানের সন্ধানের কোনও নির্দিষ্ট কারণ আছে কি? স্কিম দ্বারা আমি ধরে table definitions/structures
নিচ্ছি

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

250 জিবি দৈনিক স্ন্যাপশট? এই প্রয়োজনীয়তা সঙ্গে? কিভাবে?
টম ভি - topanswers.xyz

প্রতিদিন স্ন্যাপশট কেন? 250 গিগাবাইটের কত দিনে পরিবর্তন হয়? ধীরে ধীরে পরিবর্তনশীল মাত্রা পদ্ধতির সাথে কী সমস্যা?
dnoeth

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

উত্তর:


2

বাক্স থেকে চিন্তা করা যাক। "স্ন্যাপশট" রাখার পরিবর্তে একটি "লগ" করা যাক। আপনার কাছে বর্তমানে যা রয়েছে তা "বর্তমান" বিষয়গুলির অবস্থা; একটি "লগ" যুক্ত করা "ইতিহাস" সরবরাহ করবে, যা থেকে 'হারিয়ে যাওয়া' তথ্য প্রাপ্ত হতে পারে।

লগটি কার্যকর করার একটি উপায় হ'ল টেবিলটি TRIGGERচালু INSERTবা UPDATEটেবিলের সাথে থাকা এবং লগ ফাইলটিতে ট্রিগার লেখার ব্যবস্থা করা। এই লগটি অ্যাডহক ক্যোয়ারিগুলির জন্য সুখকর হবে না, সুতরাং একটি রাতের কাজ (বা সম্ভবত প্রতি ঘন্টা) যা দিনটির পরিবর্তনের সংক্ষিপ্তসার করে - পোস্টের সংখ্যার নেট লাভ (বা ক্ষতি) ইত্যাদি "দিন 2" তথ্য এবং "গত মাসে" তথ্যটি তখন এই সারসংক্ষেপ টেবিল থেকে বেশ দ্রুত পাওয়া যায়। বা সম্ভবত দ্বিতীয় স্তরের সংক্ষিপ্তকরণ যা ঘোষণা করে যে রাজ্যটি প্রতিটি দিনের জন্য কী ছিল। UNIONদরকার হলে সন্দেহ করি needed "স্ন্যাপশট" জড়িত হবে না।


1
আমি কীভাবে দৈনিক স্ন্যাপশটগুলি জিজ্ঞাসা করতে চেয়েছি, আপনি কেবল একটি অপ্টিমাইজেশনের কথা বলছেন - আমি এটি পরে চিন্তা করব think ধন্যবাদ
ফেডেরিকো পঞ্জি

1
স্ন্যাপশটগুলি মোকাবেলা করা কঠিন (আমার মতে), সুতরাং আমি একটি জটিল সমাধানের মধ্যে ঝাঁকুনির পরিবর্তে 'আসল' সমস্যা সমাধানের একটি উপায় উপস্থাপনের চেষ্টা করছিলাম। এছাড়াও, সংক্ষিপ্তকরণ উল্লেখযোগ্যভাবে দ্রুত প্রশ্নের জন্য মঞ্জুরি দেয়।
রিক জেমস

2

সুতরাং আমি যা খুঁজছিলাম, এটি একটি নতুন ধরণের সিস্টেম যা ডেটাওয়ারহাউজিংয়ের সাথে সম্পর্কিত: ডেটা লেক সিস্টেম।

উইকিপিডিয়ায় আপনি আরও শিখতে পারেন :

ডেটা হ্রদ একটি সিস্টেমের মধ্যে ডেটা সংরক্ষণের একটি পদ্ধতি যা বৈকল্পিক স্কিম এবং কাঠামোগত ফর্মগুলিতে ডেটা সংগ্রহের সুবিধার্থে সাধারণত ব্লব বা ফাইলগুলিকে বস্তুবদ্ধ করে। হ্যাডোপ এবং এডাব্লুএস এস 3 প্ল্যাটফর্ম ডেটা হ্রদ সংগ্রহস্থলগুলি তৈরি করতে ব্যবহার করা যেতে পারে।

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