2017-12-19 28 views
2

私は支払いシステムを作ろうとします。顧客はビットコインやその他の通貨で購入することができます(USD、EUR)私は(16,8)で10進数の列を持っています。ビットコインの金額は通常通りですが、例えば100米ドルのusd値を入力しようとすると、 100.00000000、私の質問は、このような量を格納する必要がありますか?ビットコインと他の通貨に同じ10進数の列を使用しますか?すべてのレコード数をカウントするとパフォーマンスが悪いですか?またはビットコイン小数点(16,8)と他の通貨小数点(10,2)の複数の列を持つ必要があります、私は方法を表示してください、あなたが答えるときに何百万ものレコードを考慮してください。良い一日をありがとうmysqlデータベースにbitcoinと他の通貨を格納する方法

+0

これはちょうど美容的なものです... BitCoinに必要なときに '10,8 'を使用しますが、USDやEURなどを表示する場合は、プログラミング言語を使用して冗長ゼロを取り除いてください... – Soolie

答えて

3

スピードとスペースの2つの側面があります。行のフェッチは小数点/二重/などの操作よりもはるかにコストがかかるため、速度は通常問題ではありません。あなたが10億行を話しているならば、スペースは懸念される(そして減速につながる)かもしれない。

Thumbのルール:DECIMAL(m,n) take約m/2バイト。 (16,8)の場合は、正確に8バイト必要です。

DOUBLEは8バイトです。 BIGINT:8バイトその他

特に数値をソートする必要がある場合は、数値にはVARCHARを使用しないでください。

FLOATおよびDOUBLEは、特に丸め誤差を引き起こす可能性があるため、特に多くの数値を加算すると、余分な丸めが発生します。

Bitcoinに必要な正式な最大数は8桁で、その他の通貨では十分ではありません。 4は現在使用されている通貨について聞いたことがあります。 (ポンド/シリング/ペンンスは現在使用されていません)

DECIMAL(16,8)は100,000,000ドル/ユーロ/何でもオーバーフローします。十分であることを確認してください。 DECIMAL(17,8)もまた8バイトを要し、最大10億を与えます。だから、16の代わりに17を使うこともできます。

質問に戻る...「完璧な」答えはありません。

関連する問題