Maison base de données tutoriel mysql 高访问量的评论系统数据库存储过程架构

高访问量的评论系统数据库存储过程架构

Jun 07, 2016 pm 02:56 PM
存储 数据库 架构 系统 访问量 评论 processus

网站的评论信息是最耗资源的地方,做好评论数据的优化对大型站点来说至关重要 无 SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[CommentsTables]([ID] [int] IDENTITY(1,1) NOT NULL,[Key] [nvarchar](50) NOT NULL,[TableName] [nvarch

网站的评论信息是最耗资源的地方,做好评论数据的优化对大型站点来说至关重要
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[CommentsTables](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Key] [nvarchar](50) NOT NULL,
	[TableName] [nvarchar](80) NOT NULL,
	[StartID] [int] NOT NULL,
	[EndID] [int] NOT NULL,
 CONSTRAINT [PK_SysTables] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO






--根据SourceID和key获得表名
create function [dbo].[funGetTableName]
(
@SourceID int,
@Key nvarchar(50)
)
RETURNS nvarchar(80)
as 
begin
	declare @tableName nvarchar(80);
	declare @tableArea int;
	declare @mod int;
	
	declare @Size int;
	set @Size = 1000;
	
	set @mod = @SourceID % @Size;
	if @mod > 0 
		set @tableArea = Cast((@SourceID-1) / @Size as int) + 1;		
	else	
		set @tableArea = Cast((@SourceID-1) / @Size as int);
			
			
	set @tableName = 'comments_' + @Key +  Cast(@tableArea as nvarchar(10));
	
	return @tableName
end
GO







--评论写入调用存储过程

CREATE proc [dbo].[procAddComment]
(
@ParentID int,
@SourceID int,
@NickName nvarchar(20),
@Content nvarchar(300),
@IP nvarchar(30),
@City nvarchar(30),
@BeFiltered bit,
@Disable bit,
@Key nvarchar(50),
@InsertedID int Output
)
as
begin
	declare @tableName nvarchar(80);
	declare @tableArea int;
	declare @mod int;
	
	declare @Size int;
	set @Size = 1000;
	
	set @mod = @SourceID % @Size;
	if @mod > 0 
		set @tableArea = Cast((@SourceID-1) / @Size as int) + 1;		
	else	
		set @tableArea = Cast((@SourceID-1) / @Size as int);
		


	
	set @tableName = 'comments_' + @Key +  Cast(@tableArea as nvarchar(10));
	
	if not Exists(select 'x' from [CommentsTables] where [Key]=@Key and [TableName]=@tableName)	
	begin
	
		declare @StartID int;
		declare @EndID int;
		
		set @EndID = @tableArea * @Size;
		set @StartID = @EndID - (@Size-1);
	
	
		--创建表
		declare @CreateSQL nvarchar(MAX);
		set @CreateSQL = 
		'Create table [dbo].['+@tableName+'](
		[ID] [int] IDENTITY(1,1) NOT NULL,
		[ParentID] [int] NOT NULL,
		[SourceID] [int] NOT NULL,
		[NickName] [nvarchar](20) NOT NULL,
		[Content] [nvarchar](300) NOT NULL,
		[Datetime] [datetime] NOT NULL,
		[IP] [nvarchar](30) NOT NULL,
		[City] [nvarchar](30) NOT NULL,
		[BeFiltered] [bit] NOT NULL,
		[Disable] [bit] NOT NULL,
		[Lou] [int] NOT NULL,
		[Ding] [int] NOT NULL,
		[Cai] [int] NOT NULL,
		 CONSTRAINT [PK_'+@tableName+'] PRIMARY KEY CLUSTERED 
		(
			[ID] ASC
		)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
		) ON [PRIMARY]'
		
		
		EXEC(@CreateSQL);
		
		
		--创建索引 ID DESC
		EXEC('		
		CREATE UNIQUE NONCLUSTERED INDEX [IX_'+@tableName+'_ID_DESC] ON [dbo].['+@tableName+'] 
		(
			[ID] DESC
		)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]');
		
		--创建索引 Ding DESC
		EXEC('
		CREATE NONCLUSTERED INDEX [IX_'+@tableName+'_Ding_DESC] ON [dbo].['+@tableName+'] 
		(
			[Ding] DESC
		)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]');
		
		--创建索引 SourceID DESC
		EXEC('
		CREATE NONCLUSTERED INDEX [IX_'+@tableName+'_SourceID_DESC] ON [dbo].['+@tableName+'] 
		(
			[SourceID] DESC
		)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]');

		--创建索引 Lou DESC
		EXEC('
		CREATE NONCLUSTERED INDEX [IX_'+@tableName+'_Lou_DESC] ON [dbo].['+@tableName+'] 
		(
			[Lou] DESC
		)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]')
		
		
		--创建默认值
		EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_ParentID]  DEFAULT ((0)) FOR [ParentID]');
		
		EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_Datetime]  DEFAULT (getdate()) FOR [Datetime]');
		
		EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_BeFiltered]  DEFAULT ((0)) FOR [BeFiltered]');	

		EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_Disable]  DEFAULT ((0)) FOR [Disable]');
	
		EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_Lou]  DEFAULT ((1)) FOR [Lou]');
			
		EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_Ding]  DEFAULT ((0)) FOR [Ding]');
		
		EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_Cai]  DEFAULT ((0)) FOR [Cai]');
		
		Insert Into [CommentsTables]([Key],[TableName],[StartID],[EndID]) values(@Key,@tableName,@StartID,@EndID);
	end 

	
	declare @TemLou int;
	declare @SQL nvarchar(MAX);
	set @SQL = N'select @TemLou = Count(ID) from dbo.['+@tableName+N'] where SourceID=@SourceID';
	
	exec sp_executesql @SQL,
	N'@SourceID int,@TemLou int output',
	@SourceID,
	@TemLou output;
	
	if @TemLou = 0
		set @TemLou = 1;
	else
		set @TemLou = @TemLou + 1;
	
	
	
	declare @Lou int;
	set @Lou = @TemLou;
	
	declare @InsertSQL nvarchar(MAX);
	set @InsertSQL = N'Insert Into dbo.['+@tableName+N'](ParentID,SourceID,NickName,Content,IP,City,BeFiltered,[Disable],[Lou])
	values (@ParentID,@SourceID,@NickName,@Content,@IP,@City,@BeFiltered,@Disable,@Lou);select @InsertedID = SCOPE_IDENTITY();';
	
	exec sp_executesql @InsertSQL,
	N'@ParentID int,@SourceID int,@NickName nvarchar(20),@Content nvarchar(300),@IP nvarchar(30),@City nvarchar(30),@BeFiltered bit,@Disable bit,@Lou int,@InsertedID int output',
	@ParentID,
	@SourceID,
	@NickName,
	@Content,
	@IP,
	@City,
	@BeFiltered,
	@Disable,
	@Lou,
	@InsertedID output;
end 








GO















--获得最新评论存储过程

CREATE proc [dbo].[procGetNewComments]
(
@SourceID int,
@Key nvarchar(50),
@PageIndex int,
@PageSize int,
@Fields nvarchar(100),
@PageCount int output
)
as
begin
	declare @tableName nvarchar(80);
	set @tableName = dbo.funGetTableName(@SourceID,@Key);
	declare @Rc int;	
	
	declare @SQL nvarchar(MAX);
	set @SQL = N'select @Rc = COUNT(ID) from dbo.['+@tableName+N'] where SourceID = @SourceID';	
	
	exec sp_executesql @SQL,
	N'@SourceID int,@Rc int output',
	@SourceID,
	@Rc output;
	
	if @Rc % @PageSize > 0 
		set @PageCount = Cast(@Rc / @PageSize as int) + 1;
	else
		set @PageCount = Cast(@Rc / @PageSize as int);
		

	
	if @PageIndex = 1 
		begin
			set @SQL = N'select top '+Cast(@PageSize as nvarchar(30))+' '+@Fields + N' from dbo.['+@tableName+N'] where SourceID=@SourceID order by Lou desc';					
			exec sp_executesql @SQL,
			N'@SourceID int',
			@SourceID;
		end 		
	else
		begin
			declare @StartLou int;
			declare @EndLou int;
			
			--1 20  1 - 20,21- 40,41-60
			set @EndLou =  @Rc - (@PageIndex-1) * @PageSize;
			
			if @EndLou > @Rc 
				set @EndLou  = @Rc;			
			
			set @StartLou = @EndLou - @PageSize + 1;
			
			if @StartLou < 1 
				set @StartLou = 1;
			
			
			set @SQL = N'select '+@Fields + N' from dbo.['+@tableName+N'] where Lou>=@StartLou and Lou<=@EndLou and SourceID = @SourceID order by Lou desc';
			
			
			exec sp_executesql @SQL,
			N'@SourceID int,@StartLou int,@EndLou int',
			@SourceID,@StartLou,@EndLou;
		end
	
end




GO











--踩

Create proc [dbo].[procCai]
(
@ID int,
@SourceID int,
@key nvarchar(50),
@Times int output
)
as
begin
	declare @tableName nvarchar(80);
	set @tableName = dbo.funGetTableName(@SourceID,@key);
	
	declare @SQL nvarchar(MAX);
	set @SQL = N'update dbo.['+@tableName+N'] set Cai=Cai+1 where ID=@ID;select @Times=Cai from dbo.['+@tableName+N'] where ID=@ID';
	
	
	exec sp_executesql @SQL,
	N'@ID int,@Times int output',
	@ID,
	@Times output;
end


GO


--顶
create proc [dbo].[procDing]
(
@ID int,
@SourceID int,
@key nvarchar(50),
@Times int output
)
as
begin
	declare @tableName nvarchar(80);
	set @tableName = dbo.funGetTableName(@SourceID,@key);
	
	declare @SQL nvarchar(MAX);
	set @SQL = N'update dbo.['+@tableName+N'] set Ding=Ding+1 where ID=@ID;select @Times=Ding from dbo.['+@tableName+N'] where ID=@ID';
	
	
	exec sp_executesql @SQL,
	N'@ID int,@Times int output',
	@ID,
	@Times output;
end

GO




Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le système de conduite intelligent Qiankun ADS3.0 de Huawei sera lancé en août et sera lancé pour la première fois sur Xiangjie S9 Le système de conduite intelligent Qiankun ADS3.0 de Huawei sera lancé en août et sera lancé pour la première fois sur Xiangjie S9 Jul 30, 2024 pm 02:17 PM

Le 29 juillet, lors de la cérémonie de lancement de la 400 000e nouvelle voiture d'AITO Wenjie, Yu Chengdong, directeur général de Huawei, président de Terminal BG et président de la BU Smart Car Solutions, a assisté et prononcé un discours et a annoncé que les modèles de la série Wenjie seraient sera lancé cette année En août, la version Huawei Qiankun ADS 3.0 a été lancée et il est prévu de pousser successivement les mises à niveau d'août à septembre. Le Xiangjie S9, qui sortira le 6 août, lancera le système de conduite intelligent ADS3.0 de Huawei. Avec l'aide du lidar, la version Huawei Qiankun ADS3.0 améliorera considérablement ses capacités de conduite intelligente, disposera de capacités intégrées de bout en bout et adoptera une nouvelle architecture de bout en bout de GOD (identification générale des obstacles)/PDP (prédictive prise de décision et contrôle), fournissant la fonction NCA de conduite intelligente d'une place de stationnement à l'autre et mettant à niveau CAS3.0

Comment ajouter comme amis les personnes qui commentent les comptes vidéo WeChat ? Comment savoir qui est la personne qui a commenté le compte vidéo ? Comment ajouter comme amis les personnes qui commentent les comptes vidéo WeChat ? Comment savoir qui est la personne qui a commenté le compte vidéo ? Apr 01, 2024 pm 05:06 PM

À mesure que les fonctions des comptes vidéo WeChat continuent d'être mises à niveau, les utilisateurs ont des exigences de plus en plus élevées en matière d'interactivité des comptes vidéo. Parmi eux, de nombreuses personnes espèrent trouver leurs amis préférés grâce aux commentaires, puis les ajouter comme amis WeChat. Alors, comment ajouter comme amis les personnes qui commentent les comptes vidéo WeChat ? 1. Comment ajouter comme amis les personnes qui commentent les comptes vidéo WeChat ? 1. Recherchez les commentaires de vos amis préférés. Tout d'abord, vous devez trouver le commentaire dans le compte vidéo WeChat qui fait bouger votre cœur. Ceci peut être réalisé en parcourant la section commentaires du compte vidéo. Lorsque vous trouvez un commentaire intéressant, vous pouvez cliquer sur l'avatar du commentateur pour accéder à sa page d'accueil personnelle. 2. Suivez le compte vidéo et envoyez un message privé à la page d'accueil personnelle du commentateur. Vous pouvez voir son nom et son avatar WeChat. À ce stade, vous pouvez d'abord suivre le compte vidéo, puis cliquer sur

Toujours nouveau ! Mises à niveau de la série Huawei Mate60 vers HarmonyOS 4.2 : amélioration du cloud AI, le dialecte Xiaoyi est si facile à utiliser Toujours nouveau ! Mises à niveau de la série Huawei Mate60 vers HarmonyOS 4.2 : amélioration du cloud AI, le dialecte Xiaoyi est si facile à utiliser Jun 02, 2024 pm 02:58 PM

Le 11 avril, Huawei a officiellement annoncé pour la première fois le plan de mise à niveau de 100 machines HarmonyOS 4.2. Cette fois, plus de 180 appareils participeront à la mise à niveau, couvrant les téléphones mobiles, les tablettes, les montres, les écouteurs, les écrans intelligents et d'autres appareils. Au cours du mois dernier, avec la progression constante du plan de mise à niveau de 100 machines HarmonyOS4.2, de nombreux modèles populaires, notamment Huawei Pocket2, la série Huawei MateX5, la série nova12, la série Huawei Pura, etc., ont également commencé à être mis à niveau et à s'adapter, ce qui signifie qu'il y aura davantage d'utilisateurs de modèles Huawei pourront profiter de l'expérience commune et souvent nouvelle apportée par HarmonyOS. À en juger par les commentaires des utilisateurs, l'expérience des modèles de la série Huawei Mate60 s'est améliorée à tous égards après la mise à niveau d'HarmonyOS4.2. Surtout Huawei M

Quelle est l'architecture et le principe de fonctionnement de Spring Data JPA ? Quelle est l'architecture et le principe de fonctionnement de Spring Data JPA ? Apr 17, 2024 pm 02:48 PM

SpringDataJPA est basé sur l'architecture JPA et interagit avec la base de données via le mappage, l'ORM et la gestion des transactions. Son référentiel fournit des opérations CRUD et les requêtes dérivées simplifient l'accès à la base de données. De plus, il utilise le chargement paresseux pour récupérer les données uniquement lorsque cela est nécessaire, améliorant ainsi les performances.

Quelle est la courbe d'apprentissage de l'architecture du framework Golang ? Quelle est la courbe d'apprentissage de l'architecture du framework Golang ? Jun 05, 2024 pm 06:59 PM

La courbe d'apprentissage de l'architecture du framework Go dépend de la familiarité avec le langage Go et le développement back-end ainsi que de la complexité du framework choisi : une bonne compréhension des bases du langage Go. Il est utile d’avoir une expérience en développement back-end. Les cadres qui diffèrent en complexité entraînent des différences dans les courbes d'apprentissage.

Comment Hibernate implémente-t-il le mappage polymorphe ? Comment Hibernate implémente-t-il le mappage polymorphe ? Apr 17, 2024 pm 12:09 PM

Le mappage polymorphe Hibernate peut mapper les classes héritées à la base de données et fournit les types de mappage suivants : join-subclass : crée une table séparée pour la sous-classe, incluant toutes les colonnes de la classe parent. table par classe : créez une table distincte pour les sous-classes, contenant uniquement des colonnes spécifiques aux sous-classes. union-subclass : similaire à join-subclass, mais la table de classe parent réunit toutes les colonnes de la sous-classe.

iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées Jul 18, 2024 am 05:48 AM

Les dernières versions d'Apple des systèmes iOS18, iPadOS18 et macOS Sequoia ont ajouté une fonctionnalité importante à l'application Photos, conçue pour aider les utilisateurs à récupérer facilement des photos et des vidéos perdues ou endommagées pour diverses raisons. La nouvelle fonctionnalité introduit un album appelé "Récupéré" dans la section Outils de l'application Photos qui apparaîtra automatiquement lorsqu'un utilisateur a des photos ou des vidéos sur son appareil qui ne font pas partie de sa photothèque. L'émergence de l'album « Récupéré » offre une solution aux photos et vidéos perdues en raison d'une corruption de la base de données, d'une application d'appareil photo qui n'enregistre pas correctement dans la photothèque ou d'une application tierce gérant la photothèque. Les utilisateurs n'ont besoin que de quelques étapes simples

Une analyse approfondie de la façon dont HTML lit la base de données Une analyse approfondie de la façon dont HTML lit la base de données Apr 09, 2024 pm 12:36 PM

HTML ne peut pas lire directement la base de données, mais cela peut être réalisé via JavaScript et AJAX. Les étapes comprennent l'établissement d'une connexion à la base de données, l'envoi d'une requête, le traitement de la réponse et la mise à jour de la page. Cet article fournit un exemple pratique d'utilisation de JavaScript, AJAX et PHP pour lire les données d'une base de données MySQL, montrant comment afficher dynamiquement les résultats d'une requête dans une page HTML. Cet exemple utilise XMLHttpRequest pour établir une connexion à la base de données, envoyer une requête et traiter la réponse, remplissant ainsi les données dans les éléments de la page et réalisant la fonction de lecture HTML de la base de données.

See all articles