এসকিউএল সার্ভার 2005
আমার 900M রেকর্ড সারণীতে প্রায় 350M রেকর্ড ক্রমাগত প্রক্রিয়া করতে সক্ষম হওয়া দরকার। প্রক্রিয়াটি রেকর্ডগুলি নির্বাচন করতে আমি যে ক্যোয়ারীটি ব্যবহার করছি তা প্রক্রিয়া করার সাথে সাথে খারাপভাবে খণ্ডিত হয়ে যায় এবং সূচিটি পুনর্নির্মাণের জন্য আমার প্রসেসিং বন্ধ করতে হবে। সিউডো ডেটা মডেল এবং ক্যোয়ারী ...
/**************************************/
CREATE TABLE [Table]
(
[PrimaryKeyId] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
[ForeignKeyId] [INT] NOT NULL,
/* more columns ... */
[DataType] [CHAR](1) NOT NULL,
[DataStatus] [DATETIME] NULL,
[ProcessDate] [DATETIME] NOT NULL,
[ProcessThreadId] VARCHAR (100) NULL
);
CREATE NONCLUSTERED INDEX [Idx] ON [Table]
(
[DataType],
[DataStatus],
[ProcessDate],
[ProcessThreadId]
);
/**************************************/
/**************************************/
WITH cte AS (
SELECT TOP (@BatchSize) [PrimaryKeyId], [ProcessThreadId]
FROM [Table] WITH ( ROWLOCK, UPDLOCK, READPAST )
WHERE [DataType] = 'X'
AND [DataStatus] IS NULL
AND [ProcessDate] < DATEADD(m, -2, GETDATE()) -- older than 2 months
AND [ProcessThreadId] IS NULL
)
UPDATE cte
SET [ProcessThreadId] = @ProcessThreadId;
SELECT * FROM [Table] WITH ( NOLOCK )
WHERE [ProcessThreadId] = @ProcessThreadId;
/**************************************/
ডেটা বিষয়বস্তু ...
কলাম [ডেটাটাইপ] CHAR (1) হিসাবে টাইপ করা হয়, সমস্ত রেকর্ডের প্রায় 35% 'এক্স' এর সাথে অবশিষ্ট 'এ' এর সমান হয়।
কেবলমাত্র রেকর্ডগুলির মধ্যে যেখানে [ডেটাটাইপ] 'এক্স' এর সমান হয়, প্রায় 10% এর একটি নট [ডাটাস্ট্যাটাস] মান থাকবে।
[প্রসেসডেট] এবং [প্রক্রিয়াজাতকরণ] কলামগুলি প্রতিটি প্রক্রিয়াজাত রেকর্ডের জন্য আপডেট করা হবে।
[ডেটা টাইপ] কলামটি আপডেট করা হয় ('এক্স' পরিবর্তন করে 'এ' তে পরিণত হয়) প্রায় 10% সময়।
[ডেটাস্ট্যাটাস] কলামটি 1% এরও কম সময় আপডেট হয়।
আপাতত আমার সমাধানটি হ'ল পৃথক প্রক্রিয়াকরণ সারণিতে প্রক্রিয়া করার জন্য সমস্ত রেকর্ডের প্রাথমিক কী নির্বাচন করা। আমি কীগুলি সেগুলি প্রসেস করার সাথে সাথে মুছে ফেলি যাতে সূচি খণ্ড হিসাবে আমি কম রেকর্ড নিয়ে কাজ করছি।
তবে, আমি যে ওয়ার্কফ্লোটি রাখতে চাই তা এটি ফিট করে না যাতে ম্যানুয়াল হস্তক্ষেপ এবং উল্লেখযোগ্য ডাউনটাইম ছাড়াই এই ডেটাগুলি ধারাবাহিকভাবে প্রক্রিয়া করা যায়। আমি গৃহস্থালি কাজের জন্য ত্রৈমাসিক ভিত্তিতে ডাউনটাইম প্রত্যাশা করি। তবে এখন, পৃথক প্রক্রিয়াকরণ টেবিল ছাড়া, আমি সূচীকরণ বন্ধ এবং পুনর্নির্মাণের প্রয়োজনীয়তার জন্য টুকরো টুকরো টুকরো টুকরো টুকরো হয়ে যাওয়া ছাড়া সেট সেট অর্ধেক প্রসেসিংয়ের মাধ্যমেও পেতে পারি না।
সূচকের জন্য কোনও প্রস্তাবনা বা কোনও আলাদা ডেটা মডেল? আমার কী গবেষণা করার দরকার আছে?
আমি ডেটা মডেল এবং প্রক্রিয়া সফ্টওয়্যার সম্পূর্ণ নিয়ন্ত্রণ আছে তাই কিছুই টেবিলের বাইরে।