高访问量的评论系统数据库存储过程架构
网站的评论信息是最耗资源的地方,做好评论数据的优化对大型站点来说至关重要 无 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

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

On July 29, at the roll-off ceremony of AITO Wenjie's 400,000th new car, Yu Chengdong, Huawei's Managing Director, Chairman of Terminal BG, and Chairman of Smart Car Solutions BU, attended and delivered a speech and announced that Wenjie series models will be launched this year In August, Huawei Qiankun ADS 3.0 version was launched, and it is planned to successively push upgrades from August to September. The Xiangjie S9, which will be released on August 6, will debut Huawei’s ADS3.0 intelligent driving system. With the assistance of lidar, Huawei Qiankun ADS3.0 version will greatly improve its intelligent driving capabilities, have end-to-end integrated capabilities, and adopt a new end-to-end architecture of GOD (general obstacle identification)/PDP (predictive decision-making and control) , providing the NCA function of smart driving from parking space to parking space, and upgrading CAS3.0

On April 11, Huawei officially announced the HarmonyOS 4.2 100-machine upgrade plan for the first time. This time, more than 180 devices will participate in the upgrade, covering mobile phones, tablets, watches, headphones, smart screens and other devices. In the past month, with the steady progress of the HarmonyOS4.2 100-machine upgrade plan, many popular models including Huawei Pocket2, Huawei MateX5 series, nova12 series, Huawei Pura series, etc. have also started to upgrade and adapt, which means that there will be More Huawei model users can enjoy the common and often new experience brought by HarmonyOS. Judging from user feedback, the experience of Huawei Mate60 series models has improved in all aspects after upgrading HarmonyOS4.2. Especially Huawei M

Apple's latest releases of iOS18, iPadOS18 and macOS Sequoia systems have added an important feature to the Photos application, designed to help users easily recover photos and videos lost or damaged due to various reasons. The new feature introduces an album called "Recovered" in the Tools section of the Photos app that will automatically appear when a user has pictures or videos on their device that are not part of their photo library. The emergence of the "Recovered" album provides a solution for photos and videos lost due to database corruption, the camera application not saving to the photo library correctly, or a third-party application managing the photo library. Users only need a few simple steps

The learning curve of the Go framework architecture depends on familiarity with the Go language and back-end development and the complexity of the chosen framework: a good understanding of the basics of the Go language. It helps to have backend development experience. Frameworks that differ in complexity lead to differences in learning curves.

How to use MySQLi to establish a database connection in PHP: Include MySQLi extension (require_once) Create connection function (functionconnect_to_db) Call connection function ($conn=connect_to_db()) Execute query ($result=$conn->query()) Close connection ( $conn->close())

1. Architecture of Llama3 In this series of articles, we implement llama3 from scratch. The overall architecture of Llama3: Picture the model parameters of Llama3: Let's take a look at the actual values of these parameters in the Llama3 model. Picture [1] Context window (context-window) When instantiating the LlaMa class, the variable max_seq_len defines context-window. There are other parameters in the class, but this parameter is most directly related to the transformer model. The max_seq_len here is 8K. Picture [2] Vocabulary-size and AttentionL

Recently, Huawei announced that it will launch a new smart wearable product equipped with Xuanji sensing system in September, which is expected to be Huawei's latest smart watch. This new product will integrate advanced emotional health monitoring functions. The Xuanji Perception System provides users with a comprehensive health assessment with its six characteristics - accuracy, comprehensiveness, speed, flexibility, openness and scalability. The system uses a super-sensing module and optimizes the multi-channel optical path architecture technology, which greatly improves the monitoring accuracy of basic indicators such as heart rate, blood oxygen and respiration rate. In addition, the Xuanji Sensing System has also expanded the research on emotional states based on heart rate data. It is not limited to physiological indicators, but can also evaluate the user's emotional state and stress level. It supports the monitoring of more than 60 sports health indicators, covering cardiovascular, respiratory, neurological, endocrine,

To handle database connection errors in PHP, you can use the following steps: Use mysqli_connect_errno() to obtain the error code. Use mysqli_connect_error() to get the error message. By capturing and logging these error messages, database connection issues can be easily identified and resolved, ensuring the smooth running of your application.
