【経験】データベースクエリについて記録してください。

2005 ワード

情景はこのようにして、私達のアプリはアプリflyerの統計を取りました。ユーザーの各行為はいずれもapp floyerに報告され、大量のデータが発生します。私たちはapp floyerから提供されたpushインターフェースを通して、毎日を頻度としてこれらの統計データを取得して分析しています。これは背景です。ここでいくつかの問題に遭遇しました。1.pushから来たデータはjson形式server端の方です。それらを預かります。この中からnode下orm操作ライブラリsequelizeを調べたいですが、どうやってjsonを調べたらいいですか?
let _datas = await ModelDefines.Flyer.findAll({
      attributes: [
        [sequelize.json('data.platform'), 'platform'],
        [sequelize.json('data.country_code'), 'country_code'],
        [sequelize.json('data.agency'), 'agency']
      ],
      where: Object.assign(_whereConditions, _transToMillisecond(_whereCreateTime))
    }, true)

//    
 SELECT 
 `data`->>'$.platform' AS `platform`,
 `data`->>'$.country_code' AS `country_code`,
 `data`->>'$.agency' AS `agency` 
FROM `adbus_flyer_data` AS `adbus_flyer_data` 
WHERE (`adbus_flyer_data`.`data`->>'$.event_type') = 'install' 
AND (`adbus_flyer_data`.`data`->>'$.platform') = 'ios' 
AND (`adbus_flyer_data`.`data`->>'$.country_code') = 'TH' 
AND (`adbus_flyer_data`.`create_time` < 1509292800000 
AND `adbus_flyer_data`.`create_time` > 1509206400000);
2.前に作ったのは上のlowより前にパケットクエリを使っていますので、効率が低いです。DBAを教えてください。
 SQL ,        ,        ,             
3.はい、文を上のコードに変えます。調べたら自分で組み合わせて統計します。しかしやはり大きい遅いです。またDBAを教えてもらいました
     id , json_text ,create_time,   create_time      ,     create_time    
ここに詳細があります。以前のwhere条件の中でいくつかのフィールドは全部json_です。textの中のはそれらで調べたら、explanを作ったらmysqlは全表を掃きます。
   :    json                  DBA      。
ですから、一番上のプログラムをもう一度変えます。jsonフィールドを削除するwhereはインデックスを入れたcreate(u)だけです。タイムはカードのデータに行きます。プログラムでwhereに行きます。今日コードを書き直しました。フィルタ部分はdb-whereからprogram-whereに変えてインデックスを作りました。ついに!オンラインの倉庫は正常に調べられます。
後记:まだ终わっていません。毎日入れているデータは2 Gぐらいです。だから、近いうちに、区分の不適切な商業化表を外して専属のDB服に載せて、データを分表に書き込んで、分表で調べます。このプランは基本的にカバーできます。