Optimalisasi data yang disimpan sebesar 93% (Redis)

Saya ingin berbagi pengalaman saya dalam mengoptimalkan data untuk mengurangi biaya sumber daya.





Cepat atau lambat, sistem menimbulkan pertanyaan tentang mengoptimalkan data yang disimpan, terutama jika data disimpan dalam RAM. Contoh database semacam itu adalah Redis.





Sebagai solusi sementara, Anda dapat meningkatkan RAM sehingga menambah waktu.





Redis adalah database no-sql, Anda dapat membuat profil menggunakan perintah built-in redis-cli --bigkeys , yang akan menunjukkan jumlah kunci dan berapa banyak rata-rata yang dibutuhkan setiap kunci.





Data historis dari jenis set yang diurutkan ternyata merupakan data besar . Mereka memiliki rotasi 10 hari dari aplikasi.





Proyek ini sedang dalam produksi, jadi pengoptimalan seharusnya tidak memengaruhi pengguna dengan cara apa pun.





Data mewakili peristiwa perubahan harga / tanggal pengiriman untuk penawaran tersebut. Ada banyak penawaran - sekitar 15.000 di setiap feed (daftar harga).





Pertimbangkan contoh data acara berikut untuk sebuah penawaran:





Dibuat dengan http://json.parser.online.fr/
Dibuat dengan http://json.parser.online.fr/

{"EventName":"DELIVERY_CHANGED","DateTime":"2021-02-22T00:04:00.112593982+03:00","OfferId":"109703","OfferFrom":{"Id":"109703","Name":" LG SN11R","Url":"https://www.example.ru/saundbar-lg-sn11r/?utm_source=yandex_market&utm_medium=cpc&utm_content=948&utm_campaign=3&utm_term=109703","Price":99990,"DeliveryAvailable":true,"DeliveryCost":0,"DeliveryDate":"2021-02-24T23:49:00+03:00"},"OfferTo":{"Id":"109703","Name":" LG SN11R","Url":"https://www.example.ru/saundbar-lg-sn11r/?utm_source=yandex_market&utm_medium=cpc&utm_content=948&utm_campaign=3&utm_term=109703","Price":99990,"DeliveryAvailable":true,"DeliveryCost":0,"DeliveryDate":"2021-02-23T00:04:00.112593982+03:00"}}







Acara ini membutuhkan 706 byte.





Optimasi

  1. Untuk memulainya, saya mengurangi rotasi menjadi 7 hari, karena itu adalah minggu terakhir yang digunakan. Perlu dicatat di sini bahwa langkahnya sangat mudah (di kode sumber saya ubah 10 menjadi 7), segera mengurangi ukuran RAM sebesar 30%.





  2. , , , name, url, offerId 50%.





    C:





    {"EventName":"DELIVERY_CHANGED","DateTime":"2021-02-22T00:04:00.112593982+03:00","OfferId":"109703","OfferFrom":{"Price":99990,"DeliveryAvailable":true,"DeliveryCost":0,"DeliveryDate":"2021-02-24T23:49:00+03:00"},"OfferTo":{"Price":99990,"DeliveryAvailable":true,"DeliveryCost":0,"DeliveryDate":"2021-02-23T00:04:00.112593982+03:00"}}







    334 .





    1. json protobuf.









      1. , protobuf  proto - :





        syntax = "proto3";
        
        import "google/protobuf/timestamp.proto";
        
        message OfferEvent {
          enum EventType {
            PRICE_CHANGED = 0;
            DELIVERY_CHANGED = 1;
            DELIVERY_SWITCHED = 2;
            APPEARED = 3;
            DISAPPEARED = 4;
          }
          EventType event_name = 1;
          google.protobuf.Timestamp date_time = 2;
        
          string offer_id = 3;
        
          message Offer {
            int32 price = 1;
            bool delivery_available = 2;
            int32 delivery_cost = 3;
            google.protobuf.Timestamp  delivery_date = 4;
          }
        
          Offer offer_from = 4;
          Offer offer_to = 5;
        } 
              
              



      2. protobuf





        event_name: DELIVERY_CHANGED
        date_time {
          seconds: 1613941440
        }
        offer_id: "109703"
        offer_from {
          price: 99990
          delivery_available: true
          delivery_date {
            seconds: 1614199740
          }
        }
        offer_to {
          price: 99990
          delivery_available: true
          delivery_date {
            seconds: 1614027840
          }
        }
        
              
              



      3. protobuf





        echo '
        event_name: DELIVERY_CHANGED
        date_time {
          seconds: 1613941440
        }
        offer_id: "109703"
        offer_from {
          price: 99990
          delivery_available: true
          delivery_date {
            seconds: 1614199740
          }
        }
        offer_to {
          price: 99990
          delivery_available: true
          delivery_date {
            seconds: 1614027840
          }
        }
        ' | protoc --encode=OfferEvent offerevent.proto | xxd -p | tr -d "\n"
        0801120608c095cb81061a06313039373033220e08968d061001220608bcf7da81062a0e08968d061001220608c0b8d08106
              
              



      50 . 85%.





      proto- - https://protogen.marcgravell.com/





, 14 (50 706 ), 93%.








All Articles