PDA

View Full Version : منظور از این read و write ها چیست؟



kiani2012
چهارشنبه 14 بهمن 1394, 17:07 عصر
سلام
در پایگاه داده کاساندرا این read , write ها به صورت پیش فرض با مقادیر زیر تنظیم شده اند
منظوراز این read , write ها چیه؟
# How long the coordinator should wait for read operations to complete

read_request_timeout_in_ms: 5000
# How long the coordinator should wait for seq or index scans to complete
range_request_timeout_in_ms: 10000
# How long the coordinator should wait for writes to complete
write_request_timeout_in_ms: 2000
# How long the coordinator should wait for counter writes to complete
counter_write_request_timeout_in_ms: 5000

phoenix87
پنج شنبه 15 بهمن 1394, 00:07 صبح
با توجه به اینکه کاملا توضیح داده عملکرد اینها چی هست به نظر می رسه با معماری cassandra آشنا نیستین.اگر اینطوره باید در ابتدا با عملکرد خواندن و نوشتن و coordinator آشنا بشین تا متوجه بشین این پارامترها برای چی هست.

kiani2012
پنج شنبه 15 بهمن 1394, 15:02 عصر
با توجه به اینکه کاملا توضیح داده عملکرد اینها چی هست به نظر می رسه با معماری cassandra آشنا نیستین.اگر اینطوره باید در ابتدا با عملکرد خواندن و نوشتن و coordinator آشنا بشین تا متوجه بشین این پارامترها برای چی هست.

سلام
اگر توضیح کوتاهی بدید ممنون میشم
منبعی دارین برای coordinator ؟

phoenix87
پنج شنبه 15 بهمن 1394, 18:04 عصر
بهترین منبع همون مستندات cassandra هست.تمام نودها در کلاستر یکسان هستند بنابراین وقتی درخواست read میدین مهم نیست به کدام نود متصل می شین.اون نود درخواست شما رو می گیره و به عنوان coordinator عمل می کنه و با توجه به hashtable که در اختیار داره می دونه داده درخواستی شما در کدام نود هست و شما رو به اون نود مربوطه متصل می کنه.اما برای مواقع خرابی نودها همیشه چند کپی از داده ها در نودهای دیگه وجود داره.پس وقتی درخواست می دین اون coordinator مجبور هست با چند نود که اون کپی رو دارند تماس بگیره.اینکه با چند نود تماس بگیره رو شما در پارامترها تعیین می کنید.اگر روی ALL بگذارید با همه تماس میگیره و اگر همه داده ها یکسان باشه اون رو برمی گردونه به عنوان جواب.در غیر این صورت باید عملیات read repair صورت بگیره و اون نود که داده قدیمی تری داره از بقیه نودها که داده هاشون آپدیت تر هست، بگیره و بعد جواب رو برگردونه.که این عوامل رو شما باید در تنطیمات فایل yaml انجام بدین.البته این همه ماجرا نیست و باید کامل مستندات رو بخونید.

kiani2012
پنج شنبه 15 بهمن 1394, 19:37 عصر
بهترین منبع همون مستندات cassandra هست.تمام نودها در کلاستر یکسان هستند بنابراین وقتی درخواست read میدین مهم نیست به کدام نود متصل می شین.اون نود درخواست شما رو می گیره و به عنوان coordinator عمل می کنه و با توجه به hashtable که در اختیار داره می دونه داده درخواستی شما در کدام نود هست و شما رو به اون نود مربوطه متصل می کنه.اما برای مواقع خرابی نودها همیشه چند کپی از داده ها در نودهای دیگه وجود داره.پس وقتی درخواست می دین اون coordinator مجبور هست با چند نود که اون کپی رو دارند تماس بگیره.اینکه با چند نود تماس بگیره رو شما در پارامترها تعیین می کنید.اگر روی ALL بگذارید با همه تماس میگیره و اگر همه داده ها یکسان باشه اون رو برمی گردونه به عنوان جواب.در غیر این صورت باید عملیات read repair صورت بگیره و اون نود که داده قدیمی تری داره از بقیه نودها که داده هاشون آپدیت تر هست، بگیره و بعد جواب رو برگردونه.که این عوامل رو شما باید در تنطیمات فایل yaml انجام بدین.البته این همه ماجرا نیست و باید کامل مستندات رو بخونید.

موردی بود که برای insert کردن ارور write timeout داد من مقدار write_request_timeout_in_ms: 2000 را به 4000 میلی ثانیه تغییر دادم درست شد این برای چی بوده؟ در حالی که من فقط بر روی یه سرور این insert را داشتم یعنی فقط 1 نود بود کلاستر نداشتم.

phoenix87
پنج شنبه 15 بهمن 1394, 23:25 عصر
اون توضیحی که من دادم جهت این بود که گفتین نحوه خواندن یا نوشتن چطور کار می کنه به صورت کلی.اما این پارامتر که گفتین مدت زمانی هست که کلاینت صبر می کنه تا شما عمل نوشتن انجام بدین و بعد بهش تصدیق بدین که نوشتن انجام شد که شما اون رو افزایش دادین.اینکه چرا در یک نود چه مقدار تاخیر داره بستگی به پیکربندی داره که انجام دادین.

kiani2012
جمعه 16 بهمن 1394, 08:24 صبح
اون توضیحی که من دادم جهت این بود که گفتین نحوه خواندن یا نوشتن چطور کار می کنه به صورت کلی.اما این پارامتر که گفتین مدت زمانی هست که کلاینت صبر می کنه تا شما عمل نوشتن انجام بدین و بعد بهش تصدیق بدین که نوشتن انجام شد که شما اون رو افزایش دادین.اینکه چرا در یک نود چه مقدار تاخیر داره بستگی به پیکربندی داره که انجام دادین.

این ارور زمانی داده شد که حدود 1 میلیون رکورد درج شده در حالی که با درج 512000 رکورد زمان کل 288368 میلی ثانیه شد که برابر 288 ثانیه و حدود 4.8 دقیقه هست چرا این دو ثانیه برای این تعداد رکورد ارور نداده؟ پس احتمالا این نوشتن با نوشتن کلی تفاوت داره درسته؟

phoenix87
جمعه 16 بهمن 1394, 14:23 عصر
این query گرفتن و مدت زمانش به چیزهای زیادی بستگی داره که آیا از cli استفاده کردی یا درایور جاوا؟یا پارامتر های pagination یا fetch size.کلا کسی نمی تونه خطای دیتابیس یکی دیگه رو به راحتی پیدا کنه باید شخص شناخت به پیکربندی سیستمش داشته باشه و اینقدر پارمترها رو عوض کنه تا متوجه بشه.سوال های مشابهی زیادی مثل شما پرسیدن در سایت stackoverflow که هیچ کدام جواب یکسانی نداشتن.

kiani2012
جمعه 16 بهمن 1394, 17:13 عصر
این query گرفتن و مدت زمانش به چیزهای زیادی بستگی داره که آیا از cli استفاده کردی یا درایور جاوا؟یا پارامتر های pagination یا fetch size.کلا کسی نمی تونه خطای دیتابیس یکی دیگه رو به راحتی پیدا کنه باید شخص شناخت به پیکربندی سیستمش داشته باشه و اینقدر پارمترها رو عوض کنه تا متوجه بشه.سوال های مشابهی زیادی مثل شما پرسیدن در سایت stackoverflow که هیچ کدام جواب یکسانی نداشتن.

در واقع من یه ارزیابی با YCSB انجام دادم اونجا بهم این ارور رو داد