2012-03-10 10 views
0

私は現在、多くのトランザクションを持つアプリケーションを作成しています。値がint、少し、短い文字列など大きな文字列...私は私がこれを実行したいと最小限に処理及び記憶を保つために試してみたい異なる種類のSQLデータベースに保存された値

であってもよい 各トランザクションは、値を持つことになりますクラウド。取引には、さまざまな分野があるべきですか?

TransactionLine.valueint 
TransactionLine.valuestring 
TransactionLine.valuedecimal 
TransactionLine.valuebool 

か私には、各値の取引値の種類ごとに1つのテーブルを持っている必要があります。

TransactionLine - Table 
--------------- 
TransactionLine.ValueId 


ValueInt -Table 
------- 
ValueInt.ValueId 
ValueInt.Value 

ValueString - Table 
------- 
ValueString.ValueId 
ValueString.Value 
+0

文字列に問題がありますか?文字列は数字とビットを表すことができます。 – Andomar

+0

私はそれが別のオプションであるかどうか疑問に思っていましたが、すべてのトランザクションでnvarchar(max)を使用すると、より多くの領域を占有します。私はあなたのレコードがパフォーマンスのために必要なだけ多くの文字を使用するのを聞いたことがあると確信しています。 - 私は間違っているかもしれない。 –

+0

データ型がわからないというトランザクションは何ですか? – eaolson

答えて

1

データベースにキーと値のペアを格納できます。他のデータ型を格納できる唯一のデータ型は、VARCHAR(MAX)またはBLOBです。つまり、格納する前にすべてのデータを文字列に変換する必要があります。その変換には処理時間がかかります。

反対に、数値データのSUMまたはMAXまたはAVG、...を実行する場合は、最初に文字列を実際のデータ型に変換する必要があります。その変換にも処理時間がかかります。

データベースに書き込まれる以上のものが読み込まれます。変換の悪夢はあなたのシステムを膝に乗せます。このトピックについて多くの議論がありました。コンバージョンのコストが高いのはキラ​​ーです。

データベース全体を1つのテーブルに格納するシステムがあります。しかし、そのような場合、システム全体は、そのようなシステムを、SQLのようなリレーショナルデータベース言語ではなく、C(++、#)のような高速コンパイルされたプログラミング言語で効率的にサポートするという明確な目標を持って構築されます。

あなたが本当に望むものを完全に理解しているという考えはありません。トランザクションを保存するだけの場合は、これが有効です。しかし、なぜそれらを一度に1つのフィールドに保存したいのですか?データはレコードのグループに格納されます。また、レコードの各列のデータ型は、表の作成時に分かります。

1

実際にcassandraを調べる必要があります。たくさんの取引をすると、何百万というレコードを意味するのでしょうか? cassandraの場合、数百万のレコードを処理することが一般的です。 column family(rdbmsではテーブルは列ファミリに似ています)には多くの行が格納され、各行には列をあらかじめ定義する必要はありません。オンデマンドで定義することができます。特に、大量のレコードを処理する場合は、ストレージを大幅に削減できます。

カラム値のデフォルトのデータ型がBytesTypeであるため、データがdata type int、string、decimalまたはboolの場合は心配する必要はありません。必要に応じて列ファミリの列のメタデータであらかじめ定義できる他のデータ型もあります。あなたがアプリケーションを書くことを始めているので、私はいつかあなたがあなたの状況であなたを助ける方法とそれを読むためにいつか使うことをお勧めします。

関連する問題