不同类型将值保存到SQL数据库

时间:2012-03-10 12:02:44

标签: sql database data-structures

我目前正在编写一个会有很多交易的应用程序。 每个事务都有一个值,尽管值可以是int,bit,short string,large string等......

我想尽量将处理和存储保持在最低限度,因为我希望在云中运行它。我应该在交易上有很多不同的领域,例如。

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

或者我应该为每个值事务值类型都有单独的表。

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


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

ValueString - Table
-------
ValueString.ValueId
ValueString.Value

2 个答案:

答案 0 :(得分:1)

您可以将键值对存储在数据库中。唯一可以存储任何其他数据类型的数据类型是VARCHAR(MAX)或BLOB。这意味着所有数据必须先转换为字符串才能存储。转换将花费处理时间。

在相反的方向,当你想要做一个SUM或MAX或AVG,...数字数据时,你首先必须将字符串转换回它的真实数据类型。转换也需要处理时间。

数据库的读取比写入的要多得多。转换的噩梦会让你的系统瘫痪。关于这个话题已经有很多争论。转换的高成本是杀手锏。

有些系统将整个数据库存储在一个表中。但在这些情况下,整个系统的构建都有一个明确的目标:在快速编译的编程语言中以高效的方式支持该系统,如C(++,#),而不是像SQL这样的关系数据库语言。

我不知道我完全理解你真正想要的东西。如果您只想存储交易,这可能值得尝试。但是你为什么要一次存储一个字段呢?数据存储在记录中的组中。并且记录中每个列的数据类型在表的创建时间是已知的。

答案 1 :(得分:1)

你应该真正研究cassandra。当你说很多交易时,你的意思是数百万条记录吗?对于cassandra来说,处理数百万条记录是一种常态。您将有column family(在rdbms中,表与列族类似)存储许多行,并且对于每一行,您不需要预定义列。它可以按需定义,从而大大减少存储量,尤其是在处理大量记录时。

如果数据是data type int,string,decimal或bool,则无需担心,因为列值的默认数据类型为BytesType。如果您愿意,还可以在列族元数据元数据中预定义其他数据类型。由于您开始编写应用程序,我建议您花一些时间阅读cassandra以及它如何在您的情况下对您有所帮助。