我正在学习数据库的数据类型的用法.
例如:
为什么我要特别提到innodb?
除非您使用InnoDB表类型(请参阅第11章"高级MySQL"以获取更多信息),否则CHAR列的访问速度比VARCHAR快.
我有一个每天的cron工作,大约需要5分钟才能运行(它会收集一些数据,然后进行各种数据库更新).它工作正常,但问题是,在这5分钟内,网站完全没有响应任何请求,HTTP或其他.
看起来cron作业脚本在运行时会占用所有资源.我在PHP文档中找不到任何帮助我的东西 - 如何让脚本知道只用掉50%的可用资源?我宁愿让它运行10分钟并在此期间让用户可以使用该站点,而不是让它运行5分钟并且每天都有用户抱怨停机时间.
我确信我可以想出一种方法来配置服务器本身来实现这一点,但我更喜欢在PHP中有一个内置的方法来解决这个问题.在那儿?
或者,作为计划B,我们可以在脚本运行时将所有用户请求重定向到静态停机页面(与现在发生的情况相反,这是页面无限期加载或最终超时).
我们假设有两个用户尝试按以下顺序访问数据库中名为"comments"的表:
User1正在为id = 10的记录进行更新
更新注释SET comment ="Hello World"WHERE id = 10
User2正在为同一个表注释的所有行进行选择
SELECT*FROM评论
我想讨论以下案例之间的区别:
我想知道这个锁是如何影响选择查询的?
我的意思是,如果选择向数据库询问注释表的整个记录,并发现其中一个(id = 10)被锁定,数据库是否会再次对选择查询进行排队,直到更新完成?
如果是,那两个引擎之间有什么区别?
如果不是我想说我的网站上面有相同的情况,甚至我将我的表引擎从MyISAM更改为InnoDB,但是当有更新或插入查询时仍然出现排队任何请求的问题.
对这种情况的任何解释都会非常有用.先感谢您
我的数据库中有以下两个表(索引不完整,因为它将基于我使用的引擎):
表格1:
CREATE TABLE `primary_images` (
`imgId` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`imgTitle` varchar(255) DEFAULT NULL,
`view` varchar(45) DEFAULT NULL,
`secondary` enum('true','false') NOT NULL DEFAULT 'false',
`imgURL` varchar(255) DEFAULT NULL,
`imgWidth` smallint(6) DEFAULT NULL,
`imgHeight` smallint(6) DEFAULT NULL,
`imgDate` datetime DEFAULT NULL,
`imgClass` enum('jeans','t-shirts','shoes','dress_shirts') DEFAULT NULL,
`imgFamily` enum('boss','lacoste','tr') DEFAULT NULL,
`imgGender` enum('mens','womens') NOT NULL DEFAULT 'mens',
PRIMARY KEY (`imgId`),
UNIQUE KEY `imgDate` (`imgDate`)
)
Run Code Online (Sandbox Code Playgroud)
表2:
CREATE TABLE `secondary_images` (
`imgId` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`primaryId` smallint(6) unsigned …Run Code Online (Sandbox Code Playgroud) 我有一个大的MySQL表(~10万行,6.5G)我用它来读写.这是MyISAM,由于MyISAM对写入的所有表锁定,我得到了很多锁.
我决定尝试转移到推荐用于读/写表的InnoDB,它只锁定写入时的特定行.
转换后,我测试了插入语句,结果表明它在InnoDB表中比在MyISAM表中多花了15倍(从0.1秒到1.5秒).这是为什么?
我还没有为InnoDB配置任何东西,并且还计划添加分区,但这个数字对我来说仍然是出乎意料的.当然表是相同的,相同的索引等.
根据要求提供的其他信息:
2个索引.primary是Big INT类型的data_id,varchar(255)类型的非唯一user_id.
插入大约有150行,具有相同的user_id.
索引大小:MyISAM为200 MB,InnoDB为400 MB
我们正在运行一个社交网站,记录每个成员的行为(包括访问其他成员的页面); 这涉及到db的大量写入.这些操作存储在MyISAM表中,并且由于某些东西开始对CPU征税,我首先想到的是MyISAM的表锁定会对CPU造成这种压力.
在什么条件下应该使用InnoDB而不是MyISAM?我见过一些MySQL优化测试,其中MyISAM被证明更快.我的所有表都是MyISAM,为什么要切换到InnoDB?
我对这个主题进行了一些搜索并找到了一些结果.但是,我正在寻找是否有人知道或可能指向一些真实或有信誉的案例研究,详细说明从MyISAM迁移到InnoDB的好处(特别是性能).
很好,如果你能指出任何关于MySQL版本5.5及以上,其中InnoDb作为默认存储引擎.
通常的情况.我有一个简单的应用程序,允许人们上传照片和关注其他人.结果,每个用户将具有诸如"墙"或"活动馈送"之类的东西,其中他或她看到从他/她的朋友(他或她跟随的人)上传的最新照片.
大多数功能都易于实现.然而,当涉及到这个历史活动源时,由于纯粹的性能原因,事情很容易变成混乱.
我在这里遇到了以下困境:我可以轻松地将活动源设计为数据库的规范化部分,这将节省我的写入周期,但是在为每个用户选择这些结果时会极大地增加复杂性(对于每个上传的每张照片)在某个时间段内,选择一个特定的号码,我关注的上传者/我关注的每个人,选择他的照片)
优化选项可以是引入一系列阈值约束,例如,允许我根据上次上传的日期对我关注的人进行排序,甚至排除一些,以节省周期,并为每个用户,仅选择5个(例如)上次上传的照片.
第二种方法是为活动源引入完全非规范化的架构,其中每一行代表我的一个关注者的通知.这意味着每次上传照片时,DB都会在这个"drop bucket"中放入n行,n表示我遵循的人数,即大量的写入周期.但是,如果我有这样的表,我可以轻松地应用一些优化技术,例如聪明的索引,以及修剪早于特定时间段(队列)的条目.
然而,第三种方法可以想到,甚至是一种较少非规范化的模式,其中服务器端应用程序将从数据库中获取部分复杂性.我看到一些社交应用程序(如friendfeed)严重依赖于序列化对象(如DB中的JSON对象)的存储.
我当然还在掌握可扩展数据库设计的技巧,所以我确信有许多我错过或仍在学习的东西.如果有人能给我一个正确方向的光,我将非常感激.
mysql database database-design scalability query-optimization
有什么方法可以使用LaravelCodeBehind 创建新数据库吗?我的意思是,我无法使用php artisan或类似的东西。只是因为我想为每个注册用户创建一个数据库。之后我就可以使用migration. 我在用着Laravel 5.2。已经感谢您的支持了。
database ×7
innodb ×7
mysql ×7
myisam ×5
php ×2
laravel ×1
migration ×1
mysqli ×1
optimization ×1
performance ×1
scalability ×1
sql ×1