ホームページ >バックエンド開発 >Golang >golang の int64 キーに対するより優れたシャーディング機能はありますか?

golang の int64 キーに対するより優れたシャーディング機能はありますか?

PHPz
PHPz転載
2024-02-05 22:54:11988ブラウズ

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

質問の内容

このリポジトリから同時マッピングを使用していますが、newwithcustomshardingfunction を使用してマッピングを作成するときにキーの種類を選択できます。 。 int64 キーに独自のシャーディング関数を提供する必要があるだけです。これはここで使用しているものです。

また、ジェネリックスを使用できる go の最新バージョンも使用しているため、独自のシャーディング機能を実装して concurrent-map を使用することにしました。キーは ## です。 #int64 リーリー

私のシャーディング関数が

int64 キーに適しているかどうかを知りたいですか、それともより良いシャーディング関数を使用する必要がありますか? index out of range エラーやその他の問題が発生する状況は避けたいです。


正解


シャーディング関数は

ハッシュ関数です。この関数は、キーを 32 ビット空間全体に均等に分散する必要があります。

init64 値の下位 4 バイトが均等に分散されている場合、

uint32(key) がスライス関数として使用されます。

uint32(key) 間違った選択の例としては、下位バイトが定数値を持つ場合があります。たとえば、キーの値が 0x00010000、0x00020000、... のような場合、uint32(key) は 0 と評価されます。これは一様な分布ではありません。

int64 キーがどのように配布されるかわからない場合は、シャーディング関数でキーのすべてのビットを使用することをお勧めします。これは xor を使用したものです:

リーリー

以上がgolang の int64 キーに対するより優れたシャーディング機能はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。