Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

विशाल लॉग डेटा स्टोर करने का सबसे अच्छा तरीका

Postgresql में विभाजन बड़े लॉग के लिए बहुत अच्छा काम करता है। सबसे पहले पैरेंट टेबल बनाएं:

create table  game_history_log (
    gameid integer,
    views integer,
    plays integer,
    likes integer,
    log_date date
);

अब विभाजन बनाएँ। इस मामले में प्रत्येक माह के लिए एक, 900 k पंक्तियाँ, अच्छी होंगी:

create table game_history_log_201210 (
    check (log_date between '2012-10-01' and '2012-10-31')
) inherits (game_history_log);

create table game_history_log_201211 (
    check (log_date between '2012-11-01' and '2012-11-30')
) inherits (game_history_log);

प्रत्येक विभाजन में चेक बाधाओं पर ध्यान दें। यदि आप गलत विभाजन में सम्मिलित करने का प्रयास करते हैं:

insert into game_history_log_201210 (
    gameid, views, plays, likes, log_date
) values (1, 2, 3, 4, '2012-09-30');
ERROR:  new row for relation "game_history_log_201210" violates check constraint "game_history_log_201210_log_date_check"
DETAIL:  Failing row contains (1, 2, 3, 4, 2012-09-30).

विभाजन के लाभों में से एक यह है कि यह केवल सही विभाजन में खोज करेगा और कितने वर्षों के डेटा की परवाह किए बिना अत्यधिक और लगातार खोज आकार को कम करेगा। यहां एक निश्चित तिथि की खोज के लिए व्याख्या करें:

explain
select *
from game_history_log
where log_date = date '2012-10-02';
                                              QUERY PLAN                                              
------------------------------------------------------------------------------------------------------
 Result  (cost=0.00..30.38 rows=9 width=20)
   ->  Append  (cost=0.00..30.38 rows=9 width=20)
         ->  Seq Scan on game_history_log  (cost=0.00..0.00 rows=1 width=20)
               Filter: (log_date = '2012-10-02'::date)
         ->  Seq Scan on game_history_log_201210 game_history_log  (cost=0.00..30.38 rows=8 width=20)
               Filter: (log_date = '2012-10-02'::date)

ध्यान दें कि मूल तालिका के अलावा यह केवल सही विभाजन को स्कैन करता है। स्पष्ट रूप से अनुक्रमिक स्कैन से बचने के लिए आप विभाजन पर अनुक्रमणिका रख सकते हैं।

विरासत विभाजन



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EXISTS बनाम IN के साथ उपश्रेणियाँ - MySQL

  2. जावा MySQL कनेक्शन पूल काम नहीं कर रहा है

  3. Mysql+php, एक लिंक कैसे बनाया जाए जो एक रिकॉर्ड से सभी डेटा दिखाता है जब आप शीर्षक दबाते हैं

  4. एक लिंक पर क्लिक करके डेटा को mysql डेटाबेस में अपडेट करें

  5. सी # mysql के साथ परेशानी हो रही है:पंक्ति 1 पर कॉलम के लिए गलत स्ट्रिंग मान कोड 1366