Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan menggunakan cache untuk meningkatkan pengkomputeran aliran masa nyata data besar di Golang.

Amalan menggunakan cache untuk meningkatkan pengkomputeran aliran masa nyata data besar di Golang.

王林
王林asal
2023-06-20 15:33:401131semak imbas

Dengan kemunculan era data besar, pemprosesan data masa nyata menjadi semakin penting. Dalam pengkomputeran penstriman masa nyata, prestasi adalah faktor utama. Untuk bahasa Golang, caching boleh digunakan untuk meningkatkan prestasi pengkomputeran aliran masa nyata data besar.

Dalam artikel ini, kami akan meneroka cara menggunakan caching dalam Golang untuk meningkatkan prestasi pengkomputeran penstriman masa nyata data besar. Kami mula-mula akan memperkenalkan apa itu caching dan kelebihannya, kemudian memperkenalkan cara untuk melaksanakan caching dalam Golang, dan menggunakan contoh untuk menggambarkan cara menggunakan caching dalam pengkomputeran aliran masa nyata data besar.

Apakah caching dan kelebihannya

Caching ialah teknologi penyimpanan data yang digunakan untuk meningkatkan kelajuan capaian data. Caching biasanya menggunakan peranti storan berkelajuan tinggi untuk menyimpan data yang paling terkini atau paling kerap digunakan untuk mengelakkan pengiraan berulang atau operasi IO. Kelebihan utama menggunakan caching ialah prestasi program yang lebih baik dan responsif.

Dalam pengkomputeran strim masa nyata, sejumlah besar data perlu dianalisis dan dikira. Menyimpan data dalam cache boleh meningkatkan prestasi dan responsif program anda. Dalam cache, data yang kerap digunakan boleh disimpan dalam memori berkelajuan tinggi, dengan itu mengelakkan overhed untuk mendapatkan semula data daripada cakera atau rangkaian untuk setiap capaian. Pada masa yang sama, menggunakan cache juga boleh mengurangkan beban rangkaian dan IO, dengan itu meningkatkan prestasi dan kelajuan tindak balas keseluruhan sistem.

Risiko utama menggunakan cache ialah ketidakkonsistenan data cache. Oleh kerana data dalam cache mungkin diubah suai atau dipadamkan, ini boleh menyebabkan ketidakkonsistenan cache. Untuk mengelakkan situasi ini, pembangun perlu menggunakan beberapa teknik dan strategi untuk memastikan konsistensi data cache.

Melaksanakan caching dalam Golang

Di Golang, caching boleh dilaksanakan menggunakan mekanisme caching terbina dalam dalam perpustakaan standard. Pustaka standard menyediakan dua pelaksanaan cache biasa: peta dan penyegerakan.Pool.

Peta ialah koleksi pasangan nilai kunci yang tidak tersusun, di mana nilai boleh diakses menggunakan kunci. Di Golang, anda boleh menggunakan peta untuk melaksanakan caching. Gunakan peta untuk menyimpan dan mendapatkan semula data dengan cepat, di samping menyediakan akses mudah kepada data. Berikut ialah contoh kod yang menggunakan peta untuk melaksanakan caching:

package main

import (
    "fmt"
    "sync"
    "time"
)

var cache = make(map[string]string)
var mu sync.Mutex

func main() {
    go dataReader()
    go dataReader()

    time.Sleep(2 * time.Second)
}

func dataReader() {
    for {
        getData("key")
        time.Sleep(100 * time.Millisecond)
    }
}

func getData(key string) string {
    mu.Lock()
    defer mu.Unlock()

    if val, ok := cache[key]; ok {
        fmt.Println("Cached: ", val)
        return val
    }

    time.Sleep(500 * time.Millisecond)
    data := "Data " + time.Now().Format(time.StampMilli)
    fmt.Println("Loaded: ", data)
    cache[key] = data
    return data
}

Dalam contoh ini, kami menggunakan peta untuk melaksanakan fungsi caching mudah. Kami menggunakan sync.Mutex untuk melindungi pembacaan dan penulisan peta dan menentukan sama ada data telah dicache dalam peta dalam kaedah getData. Sekiranya wujud, data diperolehi terus daripada peta jika tidak wujud, data dibaca daripada sumber data. Selepas mendapat data, kami menyimpannya dalam peta supaya ia boleh diambil dengan cepat pada kali berikutnya ia diakses.

Satu lagi pelaksanaan cache biasa ialah penyegerakan.Pool. Kolam adalah kumpulan objek yang boleh digunakan untuk menyimpan dan menggunakan semula objek sementara untuk mengelakkan penciptaan dan pemusnahan objek yang kerap. Menggunakan Pool boleh meningkatkan prestasi dan responsif program anda. Berikut ialah contoh kod yang menggunakan sync.Pool untuk melaksanakan caching:

package main

import (
    "bytes"
    "fmt"
    "sync"
)

var bufPool = sync.Pool{
    New: func() interface{} {
        return bytes.NewBuffer([]byte{})
    },
}

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            b := bufPool.Get().(*bytes.Buffer)
            defer bufPool.Put(b)
            b.WriteString("Hello World!")
            fmt.Println(b.String())
        }()
    }
    wg.Wait()
}

Dalam contoh ini, kami menggunakan sync.Pool untuk melaksanakan kumpulan cache untuk menyimpan dan menggunakan semula penimbal bait sementara. Kami mentakrifkan fungsi untuk mencipta penimbal bait baharu dan menggunakan kaedah Put dan Dapatkan untuk menyimpan dan mendapatkan penimbal bait. Selepas menggunakan penimbal bait, kami meletakkannya semula ke dalam kolam cache untuk kegunaan seterusnya.

Kejadian penggunaan cache untuk meningkatkan prestasi pengkomputeran strim masa nyata data besar

Dalam aplikasi sebenar, adalah perkara biasa untuk menggunakan cache untuk meningkatkan prestasi aliran masa nyata data besar pengkomputeran. Berikut ialah contoh kod yang menggunakan caching untuk meningkatkan prestasi pengiraan penstriman masa nyata data besar:

package main

import (
    "fmt"
    "math/rand"
    "sync"
    "time"
)

type Data struct {
    Key   string
    Value int
    Time  time.Time
}

var cache = make(map[string]*Data)
var mu sync.Mutex

func main() {
    go producer()
    go consumer()

    time.Sleep(10 * time.Second)
}

func producer() {
    for {
        key := randString(10)
        value := rand.Intn(100)
        data := &Data{Key: key, Value: value, Time: time.Now()}
        mu.Lock()
        cache[key] = data
        mu.Unlock()
        time.Sleep(500 * time.Millisecond)
    }
}

func consumer() {
    for {
        mu.Lock()
        for key, data := range cache {
            if time.Since(data.Time) >= 2*time.Second {
                delete(cache, key)
            } else {
                fmt.Println(data.Key, data.Value)
            }
        }
        mu.Unlock()
        time.Sleep(100 * time.Millisecond)
    }
}

func randString(length int) string {
    const charset = "abcdefghijklmnopqrstuvwxyz0123456789"
    b := make([]byte, length)
    for i := range b {
        b[i] = charset[rand.Intn(len(charset))]
    }
    return string(b)
}

Dalam contoh ini, kami menggunakan peta untuk melaksanakan caching dan melindungi pembacaan dan penulisan serentak peta melalui penguncian (mutex) . Kami menggunakan fungsi pengeluar untuk menjana rentetan rawak panjang 10 sebagai kunci setiap 500ms, menjana nilai secara rawak antara 0 dan 100, dan masa semasa sebagai nilai. Kami menyimpan data yang dijana dalam peta. Dalam fungsi pengguna, kami merentasi data dalam peta setiap 100ms dan menyemak cap masa mereka Jika cap masa data telah melebihi 2s, ia dipadamkan daripada peta. Jika tidak, kami mengeluarkan kunci dan nilai data.

Menggunakan caching boleh meningkatkan prestasi dan responsif program anda dengan ketara. Dalam contoh di atas, kita dapat melihat bahawa program ini sentiasa menghasilkan data dan menulisnya ke cache, manakala satu lagi benang sentiasa membaca data daripada cache. Jika caching tidak digunakan, prestasi dan responsif program akan sangat terjejas.

Kesimpulan

Dalam artikel ini, kami memperkenalkan apa itu caching dan kelebihannya. Kami juga memperkenalkan cara menggunakan perpustakaan standard untuk melaksanakan caching dalam Golang, dan menggunakan contoh untuk menggambarkan cara menggunakan caching dalam pengkomputeran aliran masa nyata data besar. Menggunakan cache boleh meningkatkan prestasi dan kelajuan tindak balas program, dan mengurangkan beban pada rangkaian dan IO. Dalam aplikasi sebenar, kita harus mempertimbangkan untuk menggunakan caching untuk mengoptimumkan prestasi program dan kelajuan tindak balas.

Atas ialah kandungan terperinci Amalan menggunakan cache untuk meningkatkan pengkomputeran aliran masa nyata data besar di Golang.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn