Questions tagged «database-recommendation»

确定哪种数据库产品最适合特定情况下的要求和限制。与通常在Q&A论坛(例如StackExchange)上搜集的建议相比,这通常需要对需求有更多的洞察力。

5
数十亿行数据的最佳数据库和表设计
我正在编写一个需要存储和分析大量电气和温度数据的应用程序。 基本上,我需要存储过去几年以及成千上万个位置以后很多年的每小时小时用电量测量值,然后以一种不太复杂的方式分析数据。 我现在需要存储的信息是位置ID,时间戳(日期和时间),温度和用电量。 关于需要存储的数据量,这是一个近似值,但遵循以下原则: 20000多个位置,每月720条记录(每小时测量,每月大约720小时),120个月(十年前) )以及未来的很多年。简单计算得出以下结果: 20 000个位置x 720条记录x 120个月(10年前)= 1 728 000 000条记录。 这些是过去的记录,新记录将每月导入,因此大约每月20000 x 720 = 14400 000新记录。 总地点也将稳定增长。 对于所有这些数据,将需要执行以下操作: 检索某个日期和时间段内的数据:某个特定位置ID的所有记录,这些记录介于日期01.01.2013和01.01.2017之间以及07:00和13:00之间。 在特定日期和时间范围内进行简单的数学运算,例如,在07:00至13:00之间的5年中,某个位置ID的MIN,MAX和AVG的温度和用电量。 数据将每月写入一次,但会(至少)不断被数百个用户读取,因此读取速度显得尤为重要。 我没有使用NoSQL数据库的经验,但是从我的经验来看,它们是在此处使用的最佳解决方案。我已经阅读了最流行的NoSQL数据库,但是由于它们完全不同,并且还允许非常不同的表体系结构,因此我无法决定使用哪种最佳数据库。 我的主要选择是Cassandra和MongoDB,但由于我的知识非常有限,并且在涉及大数据和NoSQL方面没有实际经验,因此我不确定。我还阅读到PostreSQL也可以很好地处理此类数据。 我的问题如下: 我是否应该将NoSQL数据库用于如此大量的数据。如果不能,我可以坚持使用MySQL吗? 我应该使用哪个数据库? 我应该将日期和时间保留在单独的索引索引(如果可能)列中,以便在特定的时间和日期期限内快速检索和处理数据,还是可以通过将时间戳记保留在单个列中来完成此操作? 时间序列数据建模方法在这里是否合适,如果不合适,您能否为我提供良好表设计的指导? 谢谢。

6
NoSQL和传统的RDBMS有什么区别?
NoSQL和传统的RDBMS有什么区别? 在过去的几个月中,NoSQL在技术新闻中经常被提及。与传统的RDBMS相比,它最重要的功能是什么?差异发生在什么级别(物理的,逻辑的)? 在哪里使用NoSQL的最佳位置?为什么?

6
关于单线程与多线程数据库的性能
H2是在性能方面享有良好声誉的单线程数据库。其他数据库是多线程的。 我的问题是:多线程数据库什么时候比单线程数据库更有趣?有多少用户?多少个过程?触发因素是什么?任何人都可以分享经验吗? 摘要 通常的瓶颈是磁盘访问 SSD速度快,但易碎(必须执行故障处理程序) 在单线程系统上执行一个长查询将阻止所有其他查询 配置多线程系统可能很棘手 即使在单核系统上,多线程数据库也很有用

6
每个客户创建数据库会遇到什么问题?
我记得在stackoverflow播客中,Fog Creek为每个客户使用了一个数据库,用于Fogbugz。我认为这意味着Fogbugz On Demand服务器具有成千上万个数据库。 我们才刚刚开始开发Web应用程序,并且有类似的问题要解决(很多拥有自己孤立数据的客户)。 我对每个客户使用数据库有什么问题?我该如何解决? 我的初步想法 每个客户的数据库优势 更简单的数据库架构 更简单的备份-您可以依次备份每个客户,而不会真正影响其他客户。 轻松导出给定的客户数据。 更好的缓存性能-写入更活跃的表之一只会影响执行写入操作的单个客户。 跨硬件更容易扩展。例如,当我们需要从1台服务器转到2台服务器时,我们只需将一半的客户转移到新服务器上。 缺点 MySQL可以应付5,000个数据库吗?性能会糟透吗? 对模式的更改可能很难在所有数据库中复制出来。我们真的真的需要为此制定一个自动化计划,例如对架构进行版本控制以及一个脚本,该脚本可以了解如何将数据库从一个版本移植到另一个版本。 做所有客户共同的事情可能很尴尬或不可能 与上述类似,但是我们想要对所有客户执行的任何分析都是不可能的。例如,我们应如何跟踪所有客户的使用情况?


4
是否为不同的产品类型创建单独的表?
我正在设计数据库,并且对我的最初设计决策有第二个想法... 产品类型如下...型号,零件,替换零件套件和选件。 选项A(第一种设计):我计划为上述产品类型提供单独的表格。我想说每个表中大约75%的字段是相同的。 由于需要在每个产品类型之间创建关联,因此我将它们创建为单独的表格。例如,一个模型可以有很多选项,而一个选项可以有很多模型。一个选项也可以有很多部分,而一个部分可以有很多选择...等等。 选项B:除了创建单独的表格外,我还可以创建一个名为Product的表格,其中包含模型,零件,备件套件和选件。我可以使用一个称为类型的字段来区分模型,选项等。我认为不利的一面是,某些产品类型永远不会使用多个字段(留空)。我猜这就是“最佳实践”发挥作用的地方。 选项B将大大降低数据库设计的复杂性。在提取查询数据时,我也不必担心引用一堆表...

4
有没有工具可以检查我的数据库是否被规范化为第三种形式?
我最近了解了标准化,并了解实现新架构时标准化的重要性。 如何检查我的数据库是否符合2NF或3NF标准? 手动检查是肯定的选择,但是我在这里寻找自动化工具。 我不是在寻找点击工具,而是要突出一些可能的优化以使其符合3NF表的功能。我猜它可能使用基于良好样本数据和/或列名语义分析的统计信息。



3
在SAN环境中对SQL索引进行碎片整理有什么好处?
我们的SQL服务器位于SAN上。它包含数十个OLTP数据库,其中一些数据库包含100万条以上的记录。 我们每周运行Ola Hallengren的索引维护脚本,并且每次运行几个小时。根据碎片阈值,脚本将重新组织索引或为索引重新编制索引。我们已经观察到,在重新索引期间,日志文件会变得很大,这会导致日志传送过程中带宽的过度消耗。 然后是Brent Ozar的一篇文章,他说不再停止担心SQL索引: 您的硬盘驱动器与其他同时共享驱动器请求的服务器共享,因此驱动器将始终在各处跳跃以获取数据。整理索引碎片只是毫无意义的繁忙工作。 谷歌搜索这个问题会导致意见分歧,其中大多数观点似乎太简短或太弱。我们的暂定计划是调整维护脚本中的碎片阈值,以使其重新组织的频率比重新编制索引的频率高得多。 最终裁决是什么?考虑到每周运行维护工作所带来的负担,是否值得对SAN上的SQL索引进行碎片整理?

2
哪种DBMS适合超快速读取和简单的数据结构?
我正在开发一种产品,作为其操作的一部分,它必须跟踪大量文件/目录。这个想法是将统计信息存储在数据库中,然后在启动时为每个文件创建监视。更改的文件将排队(在数据库中),以便组同步到远程数据库。它们将按照优先级顺序(1-10之间的数字)进行同步。 有关数据库的信息: <100,000个统计信息条目 在启动时读取整个数据库,只需要文件路径 排队的文件将具有优先级字段(无需搜索其他内容) 插入可能很慢 我找到了一些我认为可以使用的数据库,但是我不确定哪一个是最好的: Redis-将文件路径存储为密钥,将统计数据存储为值;队列将是一个列表 MongoDB-比Redis更多的查询选项,但仍然快速 我认为NoSQL数据库将是最好的解决方案,因为没有太多的关系逻辑,总数据量也不会太大(例如<100 mb,更接近<30 mb)。我确实看过SQLite,因为它看起来很简单,可以嵌入可安装的应用程序中。 由于这是面向最终用户而不是高负载服务器的分布式应用程序,因此数据库不必支持许多同时用户。这里的首要任务是找到一个最有意义的数据库。 那么问题是,哪种数据库最适合这种情况? 另外,是否还有其他数据库对这样的应用程序更有意义?

2
PostGIS与SQL Server的GIS数据
因此,我最近刚开始在一家新公司工作,有很多ArcGIS用户,他们似乎非常热衷于继续使用PostGIS实例向我们的客户提供一些数据。虽然我对此没有疑问,但我们拥有95%的SQL Server和5%的Oracle商店。我们当前的内部GIS在SQL Server上运行,我还没有收到任何投诉。 我知道SQL Server截至2012年已经改善了很多空间/几何功能,但是PostGIS中是否有任何杀手级功能值得引入新平台?我已经尝试进行研究,但是找不到真正深入的东西,或者那不是完全偏见。 我想为他们提供最好的工具来完成他们的工作,但同时也必须权衡一个事实,即我将从一开始就学习Postgres / GIS,这本身就是一个完整的过程。

5
Oracle的哪些功能使其成为小型项目的诱人选择?
考虑到Oracle的许可处理[a](在较小程度上包括成本),我一直想知道选择PostgreSQL还是选择MySQL的决定因素是什么。 我的公司几乎总是选择Oracle(如果可能,则使用XE),即使对于只有一个简单的Windows服务器运行数据库而没有任何专门的DB管理的小型项目。(请注意,小的也并不意味着数据将总是适合的Oracle XE的相当小尺寸的限制。) 我一直对这种选择提出质疑,但是这样做的好处是,至少我们只接触一种数据库产品。 尽管如此,在给定一个新项目的情况下,您需要RDBMS,但是数据库的项目和范围很小,基于您在简单Windows服务器上运行Oracle的哪些独特功能(无需过多的专门管理),您会选择Oracle另一个RDBMS? 附加上下文:我们的许多数据库部署都以“低管理”模式在客户站点上运行。即,数据库仅建立一次。对其现场的正确行为和性能进行了一些初步测试。此后,数据库就可以继续运行了。没有进行常规管理。仅当出现故障时,技术人员(而非专门的DBA)才会检查数据库,以尝试找出问题所在。备份通常作为脱机备份完成。在某些项目中,客户甚至都不在乎是否涉及RDBMS。他们只是将自己的应用视为可以(可以不可以)的黑匣子。 [a]:在我工作的地方,数名项目经理反复花了几个月的时间才能为小型项目获得适当的许可,因为如果收入微不足道,当地的Oracle代表对销售他们的产品就不太感兴趣。

3
针对社交网络/知识库社区的数据库建议?
我正在为一个想在夏天开始的新项目研究各种数据库类型和DBMS。 我已经在MySQL和postgreSQL中构建了系统,现在我想扩展我在数据库中的知识和经验。 我的项目将是一种社交网络/聚合知识的事物。(还没有开发出一个描述它的术语)。 我一直在看: Cassandra(使用自己的查询语言类型);对于功能丰富的内容并提供高性能的查询执行来说,这似乎是一件好事。但是我不太热衷于此,因为它需要Java环境才能工作,而且我希望与Oracle无关。 MongoDB(noSQL类型的DBMS);强大的可伸缩性,但是您将失去经过验证的SQL语言上已经可用的所有功能,例如业务信息查询。 系统要求: 数据文本,日期,时间,xml,小整数,blob, 结构/行为:标准化3NF,非实时,关系,可伸缩,健壮 环境: unix / linux,没有JAVA !,最好在C上运行 我想知道您是否可以指出我应该研究的任何其他数据库系统。 我也看过对象关系数据库,我很喜欢它们与PHP对象(PDO)一起工作的想法,但是它们的性能似乎有点差。 看到这里将有DBA,您对这些系统的任何反馈都将不胜感激。 谢谢

2
正确的技术来存储用户事件数据
在数据库设计方面,我大多是自学成才。我提出这个问题是因为我已经确定了这种通用结构,但是想知道这是最有效还是“行业标准”的方法。 我设计的大多数数据库都有一个用户表,然后在另一个表中跟踪人员活动。我知道数据库的优点是具有这种效率,但是活动表将定期从每个定期使用它的用户中迅速收集许多事件,因此,在中等用户使用率的情况下,活动表将很快成为一个巨大的表。这是让它以这种方式发展的最佳实践吗?是表的层,还是根据日期,用户数量或其他原因拆分为不同的表? +--------------------+ +------------------------+ | UserData | | Activity | +-=------------------+ +------------------------+ | ID (auto uint) | <--1-to-many-+ | ID (auto uint) | | UserName (text) | +--> | UserID (uint) | | Email (text) | | Timestamp (time) | | additional info... | | Type (ID to elsewhere) | …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.