我正在使用我公司的数据库,为许多外部应用程序提供数据。所以我需要将相同的数据转换成很多动态视图。我可以看到一位前数据库开发人员已经实现了许多长链视图-函数-过程调用序列,以进行所有外部应用程序更常见的转换。我认为,这种架构和如此长的请求(存储过程调用一些函数,然后 funcs 调用一些视图,这个视图基于其他视图等等)是一个性能问题,至少查询优化器没有解决这些问题(请确认我的猜测)。这是好方法吗?它是性能下降的原因吗?如果是,我如何重新实现数据库的对象。此刻,我看到了执行此操作的以下步骤:
谢谢你。
performance sql-server-2008 database-design database-recommendation
我正在寻找一个便携式示例数据库
我知道那里有 Adventureworks、Northwind 和 pubs 示例数据库,但我正在寻找更小的东西。
知道在哪里可以找到这种数据库吗?
我正在开发一个 ASP/MS SQL 项目,该项目根据日期和时间执行大量计算。在一种情况下,系统将根据全天最接近的半小时增量查找值。
在设计数据库时,我应该创建一个仅包含增量的查找表,例如:00:00:00, 00:30:00, 01:00:00,然后创建另一个带有值和 FK 到小时的表增量?或者我应该在另一列中包含时间增量吗?或者我不应该在函数或存储过程中包含增量并构建业务逻辑?
这是我在这里的第一篇文章,所以我希望它足够清楚。我想为销售、购买、出租和修理某种产品的人制作一个应用程序。
我需要创建一个数据库来保存产品和帐户的数据(包括登录名和个人信息)。我的问题是,“帐户”可以是卖方、买方、承租人、修理工,可以是全部、无或某些。卖家、买家、租房者和修理者会有不同的领域,就像卖家可以发布产品,并保存一些只有卖家才能拥有的信息,修理者只能发布他的列表,但卖家,也可以是固定器。买家也可以出售产品并喜欢其他人。卖家和买家之间的区别在于卖家必须是一家公司,等等……
我对数据库的想法是这样的:
产品
product_id
product_name
owner_id (account_id)
Run Code Online (Sandbox Code Playgroud)
帐户
account_id
email
password
Run Code Online (Sandbox Code Playgroud)
卖方
seller_id
account_id
business_name
address
[some fields that only sellers would have...]
Run Code Online (Sandbox Code Playgroud)
买方
buyer_id
account_id
first_name
last_name
address
[some fields that only buyer would have...]
Run Code Online (Sandbox Code Playgroud)
承租人
renter_id
account_id
business_name
address
[some fields that only renter would have...]
Run Code Online (Sandbox Code Playgroud)
固定器
fixer_id
account_id
business_name
address
years_experience
[some fields that only fixers would have...]
Run Code Online (Sandbox Code Playgroud)
然后是其他表,如 account_favorite(用于保存有关哪些产品已被选为收藏的信息)。
现在,我觉得我这样做的方式不是正确的方式。还想如果将来我考虑其他事情,例如“收集器”,我将不得不创建一个新表。因为这是一个会被很多人使用的应用程序,所以我必须关心速度,但我也必须关心人们维护和分析数据。我希望这篇文章很清楚,如果不清楚,请问我。
我将把500,000,000张图片的签名插入到数据库中。签名将使用libpuzzle生成。每个签名是 338 个字节。(所以 160 GB)加上一个搜索表(阅读下文)。我更愿意将主数据库保留在带有标准 HDD 的 VPS 服务器上(由于成本问题,没有 SSD)。
最重要的方面是搜索时间,插入时间无所谓。
过去,我在 MySQL 中尝试了所有这些(记录更少),并且所有内容都使用一个数据库,主要搜索采用如下方案:
--
-- Table structure for table `signatures`
--
CREATE TABLE IF NOT EXISTS `signatures` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`compressed_signature` varchar(338) NOT NULL,
`picture_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `picture_id` (`picture_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1107725 ;
-- --------------------------------------------------------
--
-- Table structure for table `stored_pictures`
--
CREATE TABLE IF NOT EXISTS `stored_pictures` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(255) …Run Code Online (Sandbox Code Playgroud) 我们目前有一个包含数百万条记录(最大表中有 1400 万条记录)的生产数据库。
数据库的一个功能是提供时间表信息,因此单个表可以有 200 万个时间表,但可以连接到其他 5 个“明细”表,并且每个明细表都有 50 万到 14 百万条记录。
此外,我们正在运行一些无法在短期内更改或替换的遗留软件。我们遇到的问题是,不幸的是,有一些查询(也是遗留的且无法更改)正在执行大量表扫描。因此,查找 100 个时间表会导致扫描数百万行。
我不是贸易 DBA,但我相信我已经索引了所有我可能索引的内容,尽我所知的逻辑和研究。另外,我相信我已经设置了适当的重新索引作业等。
我们SQL Server 2008 (10.0.5500.0)在具有 32GB RAM(16GB 专用于 SQL Server)的机器上运行。机器上没有太多其他资源,因此大部分资源都用于 SQL Server。
我们的下一个计划是可能向机器添加更多 RAM,并且可能将 SQL Server 使用的 RAM 增加到 32GB。我们的数据库大小在磁盘上约为 56GB。
我的问题是,您认为我们应该考虑升级到 SQL Server 2014 Enterprise 以便我们可以对时间表表进行分区吗?我是表分区的新手,但据我所知,它可以用来按站点和年份对我们的表进行分区?这样 1400 万行将被 10-20 个站点拆分,然后按年份进一步拆分,这样查询将扫描 10k-20k 行而不是 14m。或者我只是完全错过了这里的标记?
任何其他建议将受到欢迎。
谢谢你。
performance sql-server database-recommendation partitioning query-performance
我正在从事一个项目,我需要以两种方式对网站进行排名 - 全球排名及其在特定国家/地区的排名。计算两者的基础有多种因素。大约有 200 个国家需要计算排名。
我正在使用 MySQL
我有两个问题——
全球排名
每当添加任何新网站时 -
order by根据分数进行分配排名,并返回其位置。这似乎不像order by昂贵的操作那样可扩展。国家排名数据库和更新
我应该如何存储每个网站的每个国家/地区排名?
添加新网站时如何更新所有这些排名?在这里,更新的成本甚至比全球排名更高。
我应该on-the-fly在查询时生成它然后缓存结果吗?
Play 商店等网站如何显示个性化和基于国家/地区的结果?
mysql performance database-design database-recommendation query-performance
我开始在我的生产站点上遇到一些问题,当有一个网页需要加载一个非常大的 ResultSet(目前来自关系数据库,MySQL)时,它需要永远,而且这些结果集只会越来越大。
我开始寻求更好的解决方案,我遇到的是将数据保存在 NoSQL 数据库中的想法。(我已经在使用 Mongo,但由于我的环境中存在大量 DML,Mongo 效率低下。)因此,在网上搜索时,我考虑了以下 2 个选项:
当查看以上两个时,我可以说两者都是基于 JSON 文档的(好吧,这是一个好的开始),但是当进入一些技术背景时,我确实在寻找更好的缓存(我不想杀死我的服务器的 I/O)然后是 MongoDB 的主-主复制能力(我看到 CouchDB 可以根据源->目标/目标->源轻松复制)。
有人可以向我提供您的一些意见,如果您尝试过上述解决方案,我将很高兴听到您的经验。
当我想使用python写入或更改excel文件/表的特定单元格时,我将使用pandas read_csv然后更改特定单元格中的值并使用to_csv写回文件。但是写回文件似乎是用文件的更新版本覆盖整个文件,该文件仅在单个单元格中有所不同。当我更改万亿行和万亿列的表中的一个或两个单元格时,这是一个问题。
当我们在万亿个表中的单个单元格上进行写入/更改数据库操作(如在 SQL 中)时,似乎是在磁盘中仅对修改的单元格进行更改,而不是覆盖整个文件。
数据库如何促进仅写入/更新磁盘表中的特定单元格而不是覆盖整个文件?
顺便说一句,我没有使用 SQL 数据库,因为我的表包含数字列名,而 SQL 不支持。如果您知道任何支持数值作为列名的 SQL/NOSQL 数据库,请告诉我。
我正在尝试找到一个像样的关系数据库,它可以在小型服务器上运行,易于管理并且受到社区的喜爱。
我需要一个轻量级关系数据库用于我的个人 Ubuntu 服务器,只有 1Gb RAM。它将用于偶尔的读写,因此不需要高性能。
我考虑过流行的选项,如 MySQL 和 PostgreSQL,但它们消耗太多资源,甚至 MariaDB 也可能太重,因为其他项目也应该在我的服务器上运行。
我考虑过 Firebird,但事实证明它对我来说不是很直观,而且如果没有太多社区生成的指南,故障排除也很困难。
我想知道是否值得为小型宠物项目学习像 Firebird 这样的利基数据库。是否有任何需要最少 RAM、具有直观管理、驱动程序和 ORM 以及社区支持的替代方案?
sql-server ×4
performance ×3
mysql ×2
btree ×1
couchbase ×1
couchdb ×1
cursors ×1
memory ×1
nosql ×1
partitioning ×1
schema ×1