Rumah > pembangunan bahagian belakang > Golang > Adakah terdapat fungsi sharding yang lebih baik untuk kunci int64 dalam golang?

Adakah terdapat fungsi sharding yang lebih baik untuk kunci int64 dalam golang?

PHPz
Lepaskan: 2024-02-05 22:54:11
ke hadapan
989 orang telah melayarinya

golang 中 int64 键有更好的分片功能吗?

Kandungan soalan

Saya menggunakan peta serentak dari repositori ini, menyediakan fungsi sharding saya sendiri menggunakan kekunci newwithcustomshardingfunction 创建映射时可以选择键类型。我只需要为 int64, iaitu apa yang saya gunakan di sini.

Saya juga menggunakan versi terkini go ,我可以在其中使用泛型,因此我决定通过实现我自己的分片功能来使用 concurrent-map ,密钥为 int64 .

import (
    cmap "github.com/orcaman/concurrent-map/v2"
)

func shardingFunc(key int64) uint32 {
    return uint32(key) // TODO - create a better sharding function that does not rely on how uint32 type conversion works
}

func main() {
    testMap := cmap.NewWithCustomShardingFunction[int64, *definitions.CustomerProduct](shardingFunc)
    // ... use the map ...
}
Salin selepas log masuk

Saya ingin tahu apa yang berlaku dengan fungsi sharding saya untuk int64 键是否可以,或者我应该有更好的分片功能吗?我不希望出现 index out of range ralat atau sebarang isu lain.


Jawapan yang betul


Fungsi sharding ialah fungsi hash. Fungsi ini harus mengagihkan kunci secara sama rata ke atas ruang 32-bit.

Jika empat bait bawah nilai init64 anda diagihkan sama rata, maka uint32(key) akan digunakan sebagai fungsi sharding.

uint32(key) 是一个错误选择的一个例子是低字节具有常量值。例如,如果键值类似于 0x00010000、0x00020000、...,则 uint32(key) Contoh pilihan yang tidak baik ialah apabila bait rendah mempunyai nilai tetap. Contohnya, jika nilai kunci adalah seperti 0x00010000, 0x00020000, ..., maka

akan dinilai kepada sifar. Ini bukan pengedaran seragam.

Jika anda tidak tahu bagaimana kunci int64 diedarkan, lebih baik gunakan semua bit kunci dalam fungsi sharding. Ini yang menggunakan xor: 🎜
func shardingFunc(key int64) uint32 {
    return uint32(key) ^ uint32(key >> 32) 
}
Salin selepas log masuk

Atas ialah kandungan terperinci Adakah terdapat fungsi sharding yang lebih baik untuk kunci int64 dalam golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan