【経験】データベースクエリについて記録してください。
2005 ワード
情景はこのようにして、私達のアプリはアプリflyerの統計を取りました。ユーザーの各行為はいずれもapp floyerに報告され、大量のデータが発生します。私たちはapp floyerから提供されたpushインターフェースを通して、毎日を頻度としてこれらの統計データを取得して分析しています。これは背景です。ここでいくつかの問題に遭遇しました。1.pushから来たデータはjson形式server端の方です。それらを預かります。この中からnode下orm操作ライブラリsequelizeを調べたいですが、どうやってjsonを調べたらいいですか?
後记:まだ终わっていません。毎日入れているデータは2 Gぐらいです。だから、近いうちに、区分の不適切な商業化表を外して専属のDB服に載せて、データを分表に書き込んで、分表で調べます。このプランは基本的にカバーできます。
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服に載せて、データを分表に書き込んで、分表で調べます。このプランは基本的にカバーできます。