हम किस बारे में बात कर रहे हैं
एक परियोजना के लिए एक या एक और डीबीएमएस चुनना, पसंद को प्रभावित करने वाले कारकों में से एक, संग्रहीत प्रक्रियाओं और कार्यों की भाषा की उपस्थिति, इसकी क्षमताओं और सुविधा पर विचार किया जाता है।
गति के बारे में क्या? यह स्पष्ट है कि डीबीएमएस कर्नेल क्वेरी प्लान, ऑप्टिमाइज़र, इंडेक्स की उपस्थिति आदि के लिए जिम्मेदार है, नमूना दर के लिए जिम्मेदार हैं। लेकिन यह उस बारे में नहीं है।
आधुनिक डीबीएमएस की संग्रहीत प्रक्रिया भाषाओं में शास्त्रीय प्रोग्रामिंग भाषाओं में निहित कई गुण हैं: प्रकार और चर, छोरों की उपस्थिति। हम उनकी गति के बारे में बात करेंगे।
यदि आप तीन अलग-अलग डीबीएमएस में पाई की संख्या की गणना करने में रुचि रखते हैं या पहले वर्ष के लिए कंप्यूटर विज्ञान पाठ्यक्रम को याद करते हैं, तो बिल्ली को देखें।
गणित का एक सा
संस्थान के युवाओं को याद करते हुए, श्रृंखला सिद्धांत, गणितीय निर्भरता का उपयोग करते हुए एक कम्प्यूटेशनल समस्या का कार्यक्रम करने का निर्णय लिया गया:


दरअसल, हम आर्क स्पर्शरेखा की गणना करेंगे, गणना की सटीकता 10
-7 है ।
Firebird
create or alter procedure ARCTG (X double precision) returns (S double precision, I integer) as declare variable U double precision; begin S = X; U = X; I = 3; while (abs(U) >= 0.0000001) do begin U = -U*X*X*(I-2)/I; S = S + U; I = I + 2; end suspend; end
यहां एस चाप स्पर्शरेखा का मूल्य है, मैं पुनरावृत्तियों की संख्या 2 (लगभग) है।
अन्य प्रणालियों की प्रक्रियाओं में, चर मैं व्युत्पन्न नहीं था, क्योंकि पुनरावृत्तियों की संख्या हर जगह समान होगी।
प्रक्रिया को प्रोग्रामिंग करने के बाद, हम करते हैं
select 4*S,I from arctg(1)
हमें अपना नंबर Pi और काउंटर I = 10 000 003 का मूल्य मिलता है, जिससे हम निष्कर्ष निकालते हैं कि आवश्यक सटीकता प्राप्त करने के लिए, लगभग 5 मिलियन चक्रों की आवश्यकता होती है। समय - 13.5 एस।
MySQL
CREATE DEFINER = 'root'@'localhost' FUNCTION ARCTG(X DOUBLE) RETURNS DOUBLE BEGIN DECLARE U DOUBLE DEFAULT X; DECLARE S DOUBLE DEFAULT X; DECLARE I INT DEFAULT 3; WHILE (abs(U) >= 0.0000001) DO SET U = -U*X*X*(I-2)/I; SET S = S + U; SET I = I + 2; END WHILE; RETURN S; END
परिणाम - 42.5 एस
MSSQL
CREATE FUNCTION [ARCTG] (@X real=1) RETURNS real WITH EXECUTE AS CALLER AS BEGIN DECLARE @S AS REAL DECLARE @U AS REAL DECLARE @I AS INT SET @S = @X SET @U = @X SET @I = 3 WHILE (abs(@U) >= 0.0000001) BEGIN SET @U = -@U*@X*@X*(@I-2)/@I SET @S = @S + @U SET @I = @I + 2 END RETURN @S; END
परिणाम - 12 एस
परिणाम
1. एमएसएससी 2005 - 12 एस
2. फायरबर्ड 2.5 - 13.5 एस
3. MySQL 5.1 - 42.5 एस
सभी परीक्षण एक एथलॉन 3200+ मशीन, ओएस - विंडोज़ एक्सपी पर किए गए थे।
MySQL के साथ परिणाम हैरान। शायद समस्या यह थी कि वह वर्टिग्रो किट में चला गया था और इसे आसानी से कॉन्फ़िगर नहीं किया गया था। यदि कोई समान परीक्षण करता है, तो यह जानना दिलचस्प होगा।
खैर, आखिरकार
सी कोड समय (बोरलैंड संकलक, मैं कोड नहीं दूंगा) लगभग 200 टिक था (गेटिकाउंट फ़ंक्शन), अर्थात्। लगभग 0.2 एस उसके बाद, विषय को "असामान्य प्रोग्रामिंग" में स्थानांतरित करने का विचार था, लेकिन फिर भी मैं इसे निम्नलिखित परस्पर विरोधी निष्कर्षों (जो इसे पसंद करता हूं) के साथ यहां पोस्ट करता हूं:
1. डीबीएमएस तंत्र का उपयोग करते हुए बड़ी और जटिल गणना करना आवश्यक नहीं है, हालांकि वे कर सकते हैं, लेकिन डीबीएमएस के बाहर तर्क ले सकते हैं।
या
2. DBMS इंजन के लिए प्रयास करने के लिए कुछ है।