应用程序需要尽可能更新数据库中的数据。在这种情况下,除了基于计时器的请求(轮询)数据库之外,还有其他获取数据的方法吗?
我使用 MS SQL Server 2008(和 .NET 应用程序 + 实体框架),但我也想了解其他类型的数据库。
所以我最近在一家新公司开始工作,有很多 ArcGIS 用户似乎非常热衷于使用 PostGIS 实例为我们的客户提供一些数据。虽然我对此没有意见,但我们是 95% 的 SQL Server 和 5% 的 Oracle 商店。我们当前的内部 GIS 运行在 SQL Server 上,我还没有听到任何抱怨。
我知道 SQL Server 截至 2012 年有很多改进的空间/几何功能,但是 PostGIS 中是否有任何值得进入新平台的杀手级功能?我试图研究它,但找不到任何真正深入的东西,或者这不完全是偏见。
我想给他们最好的工具来完成他们的工作,但也必须权衡一个事实,即我将从一开始就学习 Postgres/GIS,这本身就是一个完整的旅程。
我们的 SQL 服务器位于 SAN 上。它包含数十个 OLTP 数据库,其中一些数据库包含多个包含超过 100 万条记录的表。
我们每周都在运行Ola Hallengren 的索引维护脚本,每次运行几个小时。根据碎片阈值,脚本将重新组织或重新索引索引。我们观察到在重新索引期间,日志文件变得很大,这导致日志传送期间带宽消耗过多。
然后是Brent Ozar 的一篇文章,他说不要担心 SQL 索引:
您的硬盘驱动器与同时发出驱动器请求的其他服务器共享,因此驱动器总是会到处跳跃以获取数据。对索引进行碎片整理只是毫无意义的繁忙工作。
谷歌搜索这个问题会导致不同的意见,大多数支持似乎太简短或太弱的论点。我们的暂定计划是在我们的维护脚本中调整碎片阈值,以便它比重新索引更频繁地重新组织。
最终判决是什么?考虑到与运行每周维护作业相关的负担,是否值得对 SAN 上的 SQL 索引进行碎片整理?
index sql-server database-recommendation sql-server-2008-r2 san
鉴于 Oracle 的许可处理[a](以及在较小程度上的成本),我一直想知道选择 Oracle 而不是 PostgreSQL 或 MySQL 的决定因素是什么。
我的公司几乎总是选择 Oracle(在可能的情况下使用 XE),即使对于只有一个简单的 Windows 服务器盒运行数据库而没有任何专门的数据库管理的小型项目也是如此。(请注意,小的也并不意味着数据将总是适合的Oracle XE的相当小尺寸的限制。)
我一直质疑这个选择,但它的好处是我们至少只接触一种数据库产品。
尽管如此,对于一个新项目,您需要一个 RDBMS,但数据库的项目和范围非常小,基于在简单的 Windows 服务器上运行的 Oracle 的哪些独特特性(没有太多的专用管理),您会选择 Oracle 而不是另一个关系数据库?
附加上下文:我们的许多数据库部署都在客户站点运行,我们称之为“低管理”模式。也就是说,数据库设置一次。在现场对其正确行为和性能进行了一些初步测试。在此之后,数据库就在其上运行。没有进行常规管理。只有当出现问题时,技术人员(不是专门的 DBA)才会检查数据库,试图找出发生了什么。备份主要是作为离线备份完成的。在某些项目中,客户甚至不关心是否涉及 RDBMS。他们只是将他们的应用程序视为一个有效(或无效)的黑匣子。
[a] :在我工作的地方,几个项目经理需要反复几个月才能为小项目获得适当的许可,因为如果收入很小,当地的 Oracle 代表对销售他们的产品并不十分感兴趣。
使用标准 SQL 数据库(目前主要使用 MySQL)有点新,我还没有遇到过很多这样的用法。
什么时候以及为什么使用负(或者更确切地说是有符号的)键来索引一个表是有用的?
在数据库设计方面,我主要是自学成才。我提出这个问题是因为我已经确定了这种通用结构,但我想知道它是否是最有效的或“行业标准”方法。
我设计的大多数数据库都有一个用户表,然后在另一个表中跟踪人员活动。我知道数据库的美妙之处在于具有这些效率,但是活动表将相当快地从每个定期使用它的用户那里收集许多事件,从而在中等用户使用情况下相当快地成为一个巨大的表。这是让它以这种方式增长的最佳实践吗?或者是一层表,还是根据日期、用户数量或其他原因拆分到不同的表?
+--------------------+ +------------------------+
| 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) |
+--------------------+ | additional info... |
+------------------------+
Run Code Online (Sandbox Code Playgroud)
我只是想知道我可以在哪里改进任何东西,以帮助我学习。
作为一个简化的例子,假设我有一个这样的表:
seq | value
----+------
102 | 11954
211 | 43292
278 | 19222
499 | 3843
Run Code Online (Sandbox Code Playgroud)
该表可能包含数亿条记录,我需要经常做这样的查询:
SELECT sum(value) WHERE seq > $a and seq < $b
Run Code Online (Sandbox Code Playgroud)
即使seq被索引,典型的数据库实现也会遍历每一行以计算最佳情况下的总和O(n),其中n是范围的大小。
是否有任何数据库可以像O(log(n))每个查询一样有效地执行此操作?
我所遇到的数据结构称为段树所描述这里。有时也称为范围树或区间树,尽管所有这些名称通常被描述为数据结构的略微不同的变体。
但是,我还没有遇到任何实现这种数据结构的数据库。对于内存结构来说,从头开始实现它很容易,但如果它必须持久化或太大而无法放入内存,则变得棘手。如果有一种在现有数据库之上实现这一点的有效模式,那也会有所帮助。
旁注:这不是仅附加表,因此在这种情况下,诸如保留累积总和之类的解决方案将不起作用。
performance database-design database-recommendation database-internals query-performance
我正在为一个我想在夏天开始的新项目研究各种数据库类型和 DBMS。
我已经在 MySQL 和 postgreSQL 中构建了系统,现在我想扩展我在数据库方面的知识和经验。
我的项目将是一种社交网络/聚合知识的东西。(还没有开发出一个术语来描述它)。
我一直在看:
系统要求:
我想知道您是否可以指出我应该研究的任何其他数据库系统。
我也看过对象关系数据库,我非常喜欢它们与 PHP 对象(PDO)一起工作的想法,但是它们的性能似乎有点差。
鉴于这里将有 DBA,对您操作过的这些系统的任何反馈都将不胜感激。
谢谢
令我感到奇怪的是,当我定义了外键时,引擎无法使用此信息自动找出正确的 JOIN 表达式,而是要求我重新键入相同的子句。是否有任何数据库,也许是某种研究项目,可以检查现有的外键?
嗨,我是一名土木工程师,有一些编程经验,但我不熟悉当今可用的大量选项。希望你能给我任何指示最好的方法。
我想以网格格式制作和查询地面测量数据的数据库。在土方作业的不同时间,每个网格位置都会有许多测量值,因此存在时间的第 4 维。
观察结果很可能是从文本文件中读入的。在每条记录中都会有一个(2 x 整数)网格位置(行和列)一个(浮点)地平面和各种字符串信息代码(总共可能多达 30 个字符)。
网格可以是大约 10000 行 x 10000 列。并非网格上的每个位置在每次调查中都有记录,但通常最多有一百条记录。许多网格位置根本没有记录(该站点不会是完美的矩形)。
我想搜索记录、提取数据并进行计算,例如计算每个网格位置的最低或最高地平面。我相当有信心,我有能力用诸如 FORTRAN、BASIC 或 C 之类的语言使用数组相当简单地进行编程。虽然很多数组元素都是空的,但我猜这不是正确的方法,像这样的大型数据库需要特殊的工具,我必须学习如何使用。
我正在考虑平台的可能选项 -
使用数据库程序。我不熟悉这些功能有多强大,但我想它们会在 GUI 上产生很多开销。
使用 SQL?这我不太了解,但它似乎是数据库的语言。我一直使用命令式语言而不是声明式语言,正如我从维基百科了解到 SQL 是声明式的,我对这种变化有点紧张。我不完全了解使用它的过程。是否有制作控制台程序的编译器?数据库是否存储在磁盘上?抱歉问了这么愚蠢的问题。
使用像 c-treeACE 这样的 API?我认为这可能是让我熟悉“做这个,然后做那个”语言的方式(不幸的是,这就是我作为工程师的想法!)。但我希望 API 提供的幕后内存和处理管理将优于我使用大型数组所能实现的。
或者我可以用面向对象的语言来做,让计算机担心存储要求。例如,如果我将记录存储为具有方法和属性的对象,这些方法和属性可以帮助我从每条记录中获得我需要的结果 - 与 3 相比,它会是一个巨大的臃肿程序吗?
可能有数亿条记录,我希望能够在运行 Windows 的现代 PC 上在几分钟而不是几小时(最好是几秒钟!)内查询和处理它们。更具体地说,我的是带有 6Gb ram 和 120Gb SSD 的 i7 处理器,运行 Windows 7 64 位。
希望有人有时间与新手分享几句智慧之词。
performance ×2
sql-server ×2
foreign-key ×1
index ×1
join ×1
nosql ×1
oracle ×1
postgis ×1
primary-key ×1
query ×1
record ×1
san ×1
scalability ×1
spatial ×1
windows ×1