मैं एक परीक्षण चला रहा हूं जहां मैं fetch time b/w appfabric और SQL Server 2008 की तुलना कर रहा हूं और लगता है कि ऐपफ़ैब्रिक SQL सर्वर से 4x समय धीमा कर रहा है।ऐपफैब्रिक कैश SQL सर्वर 2008 की तुलना में 4x धीमी गति से प्रदर्शन कर रहा है ??
मेरे पास एक SQL Server 2008 सेटअप है जिसमें 4 कॉलम के साथ केवल एक तालिका है (सभी nvarchar
)। तालिका में 6000 पंक्तियां हैं। मैं ऐपफैब्रिक कैश में एक ही पंक्ति (सीएलआर सीरियलज़ेबल ओबीजे के रूप में) डालता हूं। मैं डेटा एक्स बार लाने के लिए एक लूप चला रहा हूँ।
यहाँ कोड
public class AppFabricCache
{
readonly DataCache myDefaultCache;
public AppFabricCache()
{
//-------------------------
// Configure Cache Client
//-------------------------
//Define Array for 1 Cache Host
var servers = new List<DataCacheServerEndpoint>(1);
//Specify Cache Host Details
// Parameter 1 = host name
// Parameter 2 = cache port number
servers.Add(new DataCacheServerEndpoint(@"localhost", 22233));
//Create cache configuration
var configuration = new DataCacheFactoryConfiguration();
//Set the cache host(s)
configuration.Servers = servers;
//Set default properties for local cache (local cache disabled)
configuration.LocalCacheProperties = new DataCacheLocalCacheProperties();
//Disable exception messages since this sample works on a cache aside
DataCacheClientLogManager.ChangeLogLevel(System.Diagnostics.TraceLevel.Off);
//Pass configuration settings to cacheFactory constructor
DataCacheFactory myCacheFactory = new DataCacheFactory(configuration);
//Get reference to named cache called "default"
myDefaultCache = myCacheFactory.GetCache("default");
}
public bool TryGetCachedObject(string key, out object value)
{
value = myDefaultCache.Get(key);
bool result = value != null;
return result;
}
public void PutItemIntoCache(string key, object value)
{
myDefaultCache.Put(key, value, TimeSpan.FromDays(365));
}
}
और यहाँ है पाश कैश
public double RunReadStressTest(int numberOfIterations, out int recordReadCount)
{
recordReadCount = 0;
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < numberOfIterations; i++)
{
for (int j = 1; j <= 6000; j++)
{
string posId = "PosId-" + j;
try
{
object value;
if (TryGetCachedObject(posId, out value))
recordReadCount++;
}
catch (Exception e)
{
Trace.WriteLine("AS%% - Exception - " + e.Message);
}
}
}
sw.Stop();
return sw.ElapsedMilliseconds;
}
}
से डेटा प्राप्त करने मैं एसक्यूएल सर्वर से डेटा पुनः प्राप्त करने बिल्कुल एक ही तर्क है। यह बनाता है एक
sqlCommand = 'Select * from TableName where posId = 'someId''
यहाँ के परिणाम हैं ...
SQL Server 2008 R2 Reading-1(ms) Reading-2(ms) Reading-3(ms) Average Time in Seconds
Iteration Count = 5 2528 2649 2665 2.614
Iteration Count = 10 5280 5445 5343 5.356
Iteration Count = 15 7978 8370 7800 8.049333333
Iteration Count = 20 9277 9643 10220 9.713333333
AppFabric Reading-1 Reading-2 Reading-3 Average Time in Seconds
Iteration Count = 5 10301 10160 10186 10.21566667
Iteration Count = 10 20130 20191 20650 20.32366667
Iteration Count = 15 30747 30571 30647 30.655
Iteration Count = 20 40448 40541 40503 40.49733333
मैं यहाँ कुछ याद आ रही है? यह इतना धीमा क्यों है?
मुझे नहीं लगता कि आपने पहले डी-कैश का उपयोग किया है। बस कुछ सामान जानना पर्याप्त नहीं है। >> यदि मैं स्थानीय कैश सक्षम करता हूं, तो यह एक अनुचित परीक्षण होगा। >> थोक प्राप्त करें - मैं SQL सर्वर के लिए भी ऐसा ही कर सकता था और मुझे पूरा यकीन है कि यह काफी तेज़ होगा। एसक्यूएल सर्वर सिर्फ एक पंक्ति को पुनः प्राप्त करने से ज्यादा कुछ नहीं नफरत करता है। >> मैं केवल 6k रिकॉर्ड के लिए संपीड़न सक्षम क्यों करना चाहता हूं। प्रत्येक केवल 4 स्ट्रिंग स्टोरेज के साथ। – user1707312
@ user1707312 मैं आपको टिप्पणी नहीं समझता। क्या आप समझाएँगे ? मैं ऐपफैब्रिक का मालिक नहीं हूं। मैंने इसे एक साल से इस्तेमाल किया। यदि आपने पहले डी-कैश का उपयोग किया है, तो आपको यह भी पता होना चाहिए कि डी-कैश का उपयोग प्रदर्शन में सुधार को लक्षित नहीं करता है, लेकिन स्केलेबिलिटी। एकल डेटा तालिका वाले एकल क्लाइंट पर लूप के लिए "लोड टेस्टिंग" सबसे अच्छा तरीका नहीं है। – Cybermaxs
भूल जाओ -it इसमें शामिल नहीं होने देता है। बीटीडब्लू-फॉर्म प्रदर्शन बिंदु दृष्टिकोण मेम्केचे/कोचबेस के साथ ऐपफैब्रिक की तुलना करने का प्रयास करें। – user1707312