sql >> データベース >  >> RDS >> Mysql

巨大なログデータを保存するための最良の方法

    postgresqlでのパーティショニングは、大きなログに最適です。最初に親テーブルを作成します:

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

    次に、パーティションを作成します。この場合、毎月1つ、900k行が適切です。

    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).
    

    パーティショニングの利点の1つは、正しいパーティションでのみ検索するため、データの年数に関係なく、検索サイズが大幅に一貫して削減されることです。ここでは、特定の日付の検索について説明します:

    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. AttributeError:モジュール'mysql'には属性'connector'がありません

    2. JDBCでpostgresに接続するときにスキーマを指定することは可能ですか?

    3. Scala Sparkタイプの不一致が見つかりましたユニット、必須rdd.RDD

    4. SQLServerでのNULLの処理