我被要求考虑我们的应用程序的数据库。需要存储大约7种不同的数据。一个是识别数据,其可以包含唯一的序列号,时间,位置。所有其他6个数据集(4个二进制原始数据,2个文本数据)必须由识别数据识别。其中3个是大约2 MB的记录,其他只有几个KB。
要存储的最大记录数为1500.每行大约6 MB,因此最大总数据大约为9 GB。
我想只有一张桌子。但它看起来很丑陋,一张表有9 GB的数据。
你有这样的数据库吗?我们可以使用MySQL RDBMS。
答案 0 :(得分:7)
我很难想象您的数据结构,但我会将此作为一般经验法则:
只要该表不能再进行规范化,除了性能之外,这个大小的单个表没有任何内在错误。但是,如果数据已经标准化并且您已经考虑了所有其他因素,那么我没有太多建议。
但是,我会看一下是否真的有必要将二进制数据存储在数据库中。如果这些是图片文件,文档或您可以存储在文件系统上的内容,我建议将文件存储在文件系统和数据库中的路径中。 (这是在这个网站上反复出现的话题,我同意大多数人认为在不必要时存储BLOBS是一个坏主意。)
答案 1 :(得分:2)
我认为MySQL会因此类工作量而死亡:)关系数据库并不适合这类任务。
所以你的描述看起来很像Google Big Table。您可以在YouTube上找到有关它的有趣演示文稿。
看看这样的数据库Hadoop
的开源实现答案 2 :(得分:1)
我会稍微改变Daniel的解决方案:为简单数据字段创建一个表,然后为每种类型的二进制对象创建单独的表。像这样:
Records
=======
SerialNumber (PK)
Time
Location
Text1
Text2
Images
=======
SerialNumber (FK)
Image1
Image2
Files
=======
SerialNumber (FK)
File1
File2
答案 3 :(得分:1)
表中的BLOB和TEXT列不是“内联”存储的 - 即它们对表大小没有贡献。 BLOB /二进制数据和文本由MySQL在单独的内存区域中存储/管理。
如果你排除这两种字段,你的行大小将是100字节(比方说)。对于1500行,这将达到150,000字节 - 150千字节。 BLOB和Text是表格的一部分,但从某种意义上说,它们对你的9 GB表格大小没有贡献。
因此对表格大小不要担心或感觉不好。
答案 4 :(得分:0)
你可以解决这个问题的一种方法是让一个表只有序列号,时间和位置。 然后,在其他表中,使用引用该表的外键存储数据集。
如果没有关于如何使用数据库的更多信息,很难提供更多建议。
答案 5 :(得分:0)
考虑一下您需要检索的数据以及每个查询中需要什么,特别是常见查询,从中确定最佳数据库结构。此外,您是否需要使用所有其他元素检索二进制数据?这可能是基于文件的,只有文件路径存储在数据库中。数据配置文件越小,查询和整体性能就越快。
答案 6 :(得分:0)
如果没有关于数据实际是什么的更多信息,很难回复。
但是当你说标识符“可能包含一个唯一的序列号,时间,位置”时,听起来好像你将三个不同的东西放在一个字段中,这几乎总是一个坏主意。你的意思是有时它是一个序列号,有时它是一个时间,有时它是一个位置?如果对象有三个不同的标识符,则很可能这是三种不同的对象,应该是三个不同的表。当有人告诉我他们的表的主键是有时保存客户帐号的字符串时,有时会存储邮政编码,有时会存储产品部件号,我的反应是,这应该是三个表:一个用于客户,一个用于商店,一个用于产品。
同样,您存储的“其他数据”是什么?如果它总是与Blob相同,那么单个表是有意义的。如果它们不同,那么强制它们进入同一个表可能是一个错误。
好吧,也许这不是你的意思,我不能确定。