我需要将二进制数据文件存储在运行在 Ubuntu 服务器上的 PostgreSQL 数据库中。最初将有几十个文件,每个文件大小约为 250kb。但是,文件的数量会随着时间的推移而增加。我有时可能需要从文件中提取数据以进行其他下游分析。
我已经对将二进制数据存储为 BLOB 或引用的古老问题进行了一些研究。两者显然各有利弊。是否有任何与 PostgreSQL 相关的特定问题需要我注意?如果我想通过 PostgreSQL 函数或通过外部 Python 程序从文件中提取数据,是一种方法还是另一种方法更可取?
如果我将数据文件直接存储在数据库中,将它们存储在一个带有引用“主”表的外键的单独表中,而不是包含所有其他字段的表中会更好吗?
我已经阅读了这里的问题和答案;那里的评论表明在 Linux 上通过引用(在文件系统中)存储二进制文件更好。我在这里的问题特别与 PostgreSQL 有关,以及从文件中提取数据以进行各种分析。
更新:类似的问题。
我正在寻找(最好是免费的、开源的)数据屏蔽工具。有这样的存在吗?
注意:这个相关问题涉及用于生成测试数据的工具,但在这个问题中,我更感兴趣的是从真实数据开始,并在不丢失任何特殊关系的情况下将其屏蔽以用于测试,而不会丢失任何使其对测试目的感兴趣的特殊关系。生成的数据适用于某些测试目的,但现实世界的数据会带来您从未想过的问题。 生成大型测试数据集的工具
我听说过 SQL Server 默认保留的统计信息。他们在跟踪什么,我如何使用这些信息来改进我的数据库?
在 SQL*Plus 提示符下,Rem和 都--可以作为注释指示符:
Rem this is a comment
-- this is also a comment
create table emp (
id number primary key,
name cvarchar2(40));
Run Code Online (Sandbox Code Playgroud)
这两种评论技术有什么区别吗?
我知道在 SQL 管理工作室中,我可以右键单击表/触发器/键和script object as.... 给定对象的名称,有没有办法以编程方式执行此操作?
如果是这样,有没有办法找到与给定表关联的所有对象(主键、外键、触发器)并以编程方式编写所有这些对象?
作为开发人员,我经常使用 SQL Profiler。这是一个很好的调试工具,既可以跟踪我的代码在做什么,也可以分析性能问题。
但是我一直在我的开发环境中使用它,并且以一种非常可控的方式使用它。
SQL Profiler 能否在生产环境中实际使用?
我首先担心的是它会降低性能。
我的第二个担忧是,因为它正在生产中,您不会触发有趣的操作本身。您必须让分析器长时间运行,然后分析结果。结果集会变得太笨拙吗?(占用太多磁盘空间,查询太难)。
有人在生产中使用 SQL Profiler 吗?
作为开发网站并会做一些 SQL Server 的人,SQL Server 应该支持一个简单的子句,表明结果应该只包含特定范围的行,这对我来说似乎是毫无疑问的。例如,第 30 行到第 39 行。
就目前而言,当他们的主要关注点不是 SQL 时,在 SQL Server 中实现分页实际上有点超出了许多 Web 开发人员的能力。
此外,它将大大简化由于连接和其他条件而可能已经很复杂的查询。
最重要的是,我认为随着时间的推移,这样的条款可能更有可能在内部得到优化,因为逻辑将完全在 Microsoft 的控制之下。
前段时间我在另一个论坛上提出了这个问题,许多答复似乎表明这不是可取的。
鉴于任何现有的分页技术都将保持不变,有什么可能的原因不添加这样的子句?对于像我这样的人来说会好得多。
任何人都可以说微软没有这样做的充分理由吗?
我在决定如何将这些数据存储在我的数据库中时遇到了问题。关于最好的方法有什么建议吗?我对数据库知之甚少,我可能会补充。
我的数据格式如下,但不是 4,列数约为 240,因此每个日期都有 240 个与之关联的唯一值:
Date/Time 200,00 202,50 205,00
2010.11.12 13:34:00 45,8214 43,8512 41,5369
2010.11.12 13:35:00 461,9364 454,2612 435,5222
Run Code Online (Sandbox Code Playgroud)
此外,行与 DataSites 相关联。
我的第一个想法是有一个像这样的表:DataID (pk)、DataSiteID、ParameterID、Date、Value,在 DataSite、Parameter 和 Date 上有一个索引。ParameterID 指的是另一个存储输入列标题的表 (200,00 202,50 205,00 ...)。
我的第二个想法是拥有一个包含所有 240 多列的表格。我想出了其他一些方法,但它们也很不令人满意。
我的第一个解决方案的问题(不是那么大的问题,但我不喜欢它)是日期和 DataSiteID 将重复输入行中的所有 240 个值,因此它使用了很多的额外空间。
每年会有大约40GB的数据进来(上面的文本格式),数据会通过DataSite、Parameter和Date进行搜索。传入的数据量很可能会在一年左右的时间内翻两番。
有什么好主意吗?谢谢,詹姆斯
编辑:这是时间序列数据,列是不同波长的测量值。数据需要在相对较窄的波长范围内进行分析。在未来的某个时候,也可能会添加额外的波长。
编辑:感谢大家的回答,我真的很感激:) 我想我可能会找时间用 500GB 左右的测试数据运行一些实验。我会带着任何结论回帖;)
我在 MS SQL Server 2008 中创建了一个链接服务器到远程 MySQL 服务器。当我尝试查询任何表时,出现错误:
.表名。不包含可以选择的列,或者当前用户对该对象没有权限。
有谁知道为什么会这样?
更新:看起来这是 MSSQL SERVER 2008 的一个已知问题
我想知道是否有办法从 SQL Plus 执行 SQL Loader 脚本。
我们正在使用 Oracle 10g。
mysql ×2
oracle ×2
sql-server ×2
sqlplus ×2
linux ×1
oracle-11g ×1
postgresql ×1
profiler ×1
statistics ×1
testing ×1