انگلیسیفرانسویاسپانیایی

فاویکون OnWorks

pg_comparator - آنلاین در ابر

pg_comparator را در ارائه دهنده هاست رایگان OnWorks از طریق Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا کنید.

این دستور pg_comparator است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.

برنامه:

نام


pg_comparator - مقایسه و همگام سازی محتوای جدول کارآمد

خلاصه


pg_comparator [گزینه ها به عنوان --کمک --گزینه --مرد] conn1 conn2

شرح


این اسکریپت یک مقایسه یا همگام سازی کارآمد شبکه و زمان دو را انجام می دهد
میزهای احتمالا بزرگ در PostgreSQL و, خروجی or از SQLite پایگاه های داده، به منظور شناسایی درج شده،
تاپل های بین این جداول به روز یا حذف شدند. الگوریتم کارآمد است به خصوص اگر
تفاوت های مورد انتظار نسبتاً کوچک هستند.

پیاده سازی کاملاً عمومی است: کلیدهای چند ستونی (اما باید یک کلید وجود داشته باشد!)، خیر
با فرض انواع داده ها به غیر از اینکه می توان آنها را به متن فرستاد، زیر مجموعه ستون ها می تواند باشد
برای مقایسه، مدیریت مقادیر NULL استفاده می شود ...

این اسکریپت بر روی الگوریتم مقایسه تمرکز می کند، از این رو گزینه های زیادی وجود دارد. این واقعیت که آن را
ممکن است هر کار مفیدی انجام دهد، مانند بررسی اینکه آیا ابزار تکرار واقعاً تکرار می شود
داده های شما، یا مانند همگام سازی جداول، یک عارضه جانبی صرف است.

OPTIONS


گزینه ها امکان درخواست کمک یا تنظیم برخی پارامترهای داخلی را فراهم می کنند. کوتاه تک حرفی
گزینه ها نیز در دسترس هستند، معمولا با حرف اول نام گزینه.

"--aggregate=(sum|xor)" یا "-a (sum|xor)"
تابع تجمع برای خلاصه ها استفاده می شود XOR or مجموع. باید عمل کند
نتیجه تابع چک جمع برای PostgreSQL و SQLite، XOR تجمیع
نیاز به بارگذاری دارد هنگام استفاده، یک مشکل امضا شده/بدون امضا در هش کلید وجود دارد XOR
برای مقایسه جداول در MySQL یا SQLite در مقابل PostgreSQL. ما یک "ISUM" جدید ارائه می دهیم
جمع آوری برای SQLite زیرا هر دو "SUM" و "TOTAL" مدیریت ناسازگاری با
سرریز عدد صحیح

پیش فرض است مجموع زیرا به طور پیش فرض در دسترس است و در حالت ترکیبی کار می کند.

"--ask-pass"
به صورت تعاملی رمز عبور بخواهید. همچنین گزینه "--env-pass" را در زیر ببینید.

پیش‌فرض درخواست رمز عبور نیست.

"--ناهمزمان" یا "-A"، "--بدون ناهمزمان" یا "-X"
آیا برای اجرای پرس و جوهای ناهمزمان. با این حال این دو موازی سازی را فراهم می کند
اتصالات در هر پرس و جو کم و بیش همگام می شوند.

پیش‌فرض استفاده از جستارهای ناهمزمان برای فعال کردن برخی موازی‌سازی است.

"--checksum-computation=(ایجاد|درج)" یا "--cc=..."
نحوه ایجاد جدول چک جمع استفاده کنید ایجاد برای استفاده از "ایجاد ... به عنوان انتخاب ..."
پرس و جو، یا درج برای استفاده از عبارت "CREATE ...; INSERT ... SELECT ...". اراده قبلی
برای بدست آوردن اندازه جدول به شمارش اضافی نیاز دارید، بنابراین در پایان دو عدد وجود دارد
به هر حال پرس و جو می کند یک مشکل اندازه نوع وجود دارد درج استراتژی در MySQL،
طول رشته کلید انباشته شده باید کمتر از 64 بایت باشد.

پیش فرض است ایجاد زیرا همیشه برای هر دو پایگاه داده کار می کند.

"--checksum-function=fun" یا "--cf=fun" یا "-c fun"
تابع Checksum برای استفاده، یا ck, fnv or md5. برای PostgreSQL، MySQL و SQLite
ارائه ck و fnv توابع چک جمع باید در پایگاه های داده هدف بارگذاری شوند.
انتخاب md5 رایگان هم نمی شود: توابع ریخته گری ارائه شده باید بارگذاری شوند
وارد پایگاه های داده هدف می شود و محاسبات گران تر است.

پیش فرض است ck، که سریع است، به خصوص اگر عملیات به cpu محدود باشد و
پهنای باند نسبتا بالاست

"--checksum-size=n" یا "--check-size=n" یا "--cs=n" یا "-zn"
اندازه جمع چکی تاپل، باید باشد 2, 4 or 8 بایت ها اندازه کلید چک همیشه 4 بایت است
طولانی

پیش فرض است 8، به طوری که احتمال منفی کاذب بسیار کم است. نباید وجود داشته باشد
دلیلی برای تغییر آن

"--پاک کردن"
از قبل جداول چک و خلاصه را رها کنید. مفید پس از اجرا با "--no-temp" و
"--no-clear"، معمولاً برای اشکال‌زدایی استفاده می‌شود.

پیش‌فرض این است که رها نکنید زیرا به آن نیازی نیست.

"--روشن"
پس از محاسبه، جداول چک و خلاصه را به صراحت رها کنید. توجه داشته باشید که هستند
به طور ضمنی به طور پیش‌فرض حذف می‌شوند، وقتی اتصال بسته می‌شود، زیرا موقتی هستند، ببینید
گزینه "-(-no) - موقت". این گزینه برای رفع اشکال مفید است.

پیش فرض است نه برای پاک کردن صریح جداول چک و خلاصه، زیرا اینطور نیست
مورد نیاز است

"--debug" یا "-d"
حالت اشکال زدایی را تنظیم کنید. برای سطوح دیباگ بالاتر تکرار کنید. همچنین به "--کلمه" مراجعه کنید. مراقب آن باشید
برخی از نکات ایمن در مورد تنظیمات گزینه تحت اشکال زدایی نادیده گرفته می شوند تا امکان آزمایش فراهم شود
تحت شرایط مختلف

پیش فرض این است که در حالت اشکال زدایی اجرا نشود.

"--env-pass='var'"
رمز عبور را از متغیرهای محیطی "var1"، "var2" یا "var" برای اتصال یک بگیرید،
دو یا هر دو این قبل از پرسیدن به صورت تعاملی امتحان می شود که آیا "--ask-pass" نیز تنظیم شده است.

پیش فرض این است که به دنبال رمز عبور از متغیرهای محیطی نباشید.

"--expect n" یا "-en"
تعداد کل تفاوت های مورد انتظار (به روز رسانی، حذف و درج). این گزینه است
فقط برای تست های غیر رگرسیون استفاده می شود. بخش TESTS را ببینید.

"--folding-factor=7" یا "-f 7"
فاکتور تاشو: log2 از تعداد ردیف هایی که در هر مرحله با هم گروه بندی شده اند، شروع می شود
از برگ ها به طوری که دور اول همیشه تا حد امکان رکوردهای بیشتری را گروه بندی می کند. در
توان دو به فرد اجازه می دهد از محاسبات پوشانده استفاده کند. حداقل مقدار 1 می سازد a
درخت دودویی.

فاکتور تاشو پیش فرض log2 است 7یعنی سایز 128 تا . این مقدار پیش فرض انتخاب شد
پس از چند آزمایش اولیه روی کیس های با اندازه متوسط ​​با پهنای باند متوسط ​​یا کم. ارزش ها از
4 تا 8 باید برای اکثر تنظیمات انتخاب معقولی باشد.

"--help" یا "-h"
نشان دادن کمک کوتاه

"--key-checksum='kcs'" یا "--kcs=..."
از ویژگی چک جمع کلیدی این نام استفاده کنید که باید از قبل در جداول موجود باشد
برای مقایسه این گزینه همچنین به گزینه "--tuple-checksum" نیاز دارد. را نیز ببینید
بخش EXAMPLES در زیر برای نحوه تنظیم یک ماشه چک جمع. "--use-key" را در نظر بگیرید
در عوض اگر از قبل یک کلید اصلی اعداد صحیح توزیع شده معقول دارید.

پیش‌فرض این است که هم چک‌جمع‌های کلیدی و هم جمع‌آوری‌شده را در لحظه بسازید.

"--قفل"، "--بدون قفل"
قفل کردن جداول. تنظیم گزینه به صراحت یک راه پیش فرض را لغو می کند
یا دیگری برای PostgreSQL، این گزینه به "--transaction" نیاز دارد که توسط فعال می شود
به طور پیش فرض

پیش فرض بستگی به عملیات جاری دارد: جدول است نه قفل شده برای مقایسه،
اما آن است قفل شده برای همگام سازی

"--long-read-len=0" یا "-L 0"
حداکثر اندازه را برای اشیاء بزرگ باینری واکشی شده تنظیم کنید. خوب، به نظر می رسد حداقل نادیده گرفته شده است
توسط درایور PostgreSQL.

پیش فرض این است که مقدار پیش فرض تنظیم شده توسط درایور را حفظ کنید.

"--man" یا "-m"
صفحه دستی را به صورت تعاملی در ترمینال نشان دهید.

"--max-ratio=0.1"
حداکثر تلاش نسبی برای جستجو جستجو متوقف می شود اگر تعداد نتایج باشد
بالاتر از این آستانه نسبت به اندازه جدول بیان می شود. از 2.0 بدون محدودیت استفاده کنید
(همه تاپل ها حذف شدند و موارد جدید درج شدند).

پیش فرض است 0.1یعنی 10% اختلاف کلی قبل از تسلیم شدن مجاز است.

"--max-report=n"
حداکثر تلاش جستجوی مطلق جستجو متوقف می شود اگر تعداد تفاوت
فراتر از این آستانه است. اگر تنظیم شود، گزینه قبلی "--max-ratio" نادیده گرفته می شود،
در غیر این صورت تلاش با نسبت زمانی که اندازه جدول مشخص شد محاسبه می شود.

پیش فرض این است که حداکثر تعداد تفاوت های گزارش شده را بر اساس محاسبه کنید
گزینه "--max-ratio" با حداقل 100 تفاوت مجاز است.

"--max-levels=0"
حداکثر تعداد سطوح استفاده شده به فرد اجازه می دهد تا کردن را قطع کند. 0 به معنای عدم قطع است.
تنظیم مقدار 1 فقط از جدول چک جمع استفاده می کند، بدون خلاصه. یک ارزش از
3 یا 4 منطقی است، زیرا آخرین سطوح درخت برای آنها خوب است
فرمول پیچیدگی نظری است، اما عملکرد را در عمل بهبود نمی بخشد.

پیش فرض است 0.

"--null='text'"
نحوه مدیریت مقادیر NULL هر دو مخلوط برای هش کردن همه مقادیر، که در آن NULL یک خاص دارد
مقدار هش یا متن که در آن مقادیر NULL با رشته "NULL" جایگزین می شوند.

پیش فرض است متن چون سریعتره

"--option" یا "-o"
نمایش خلاصه گزینه

"--pg-copy=128"
گزینه آزمایشی برای استفاده از PostgreSQL's COPY به جای INSERT/UPDATE زمانی که
همگام سازی، توسط تکه هایی با اندازه مشخص شده.

"--prefix='pgc_cmp'"
پیشوند نام، احتمالاً طرحواره واجد شرایط، برای جداول مقایسه تولید شده توسط
اضافه کردن اعداد به آن اگر انتظار دارید چندین پیشوند را تغییر دهید
مقایسه ها به صورت همزمان در برابر یک پایگاه داده اجرا شوند.

پیش فرض "pgc_cmp" است. نام‌های جداول Cheksum "pgc_cmp_1_0" و "pgc_cmp_2_0" است، و
جداول خلاصه با افزایش آخرین عدد نامگذاری می شوند.

"--گزارش"، "--بدون گزارش"
کلیدهای مختلف را به محض یافتن به stdout گزارش دهید.

پیش فرض گزارش دادن است.

"--separator='|'" یا "-s '|'"
رشته یا کاراکتر جداکننده که هنگام به هم پیوستن ستون‌های کلیدی برای محاسبات استفاده می‌شود
چک جمع ها

پیش فرض های لوله '|' شخصیت.

"--size=n"
این مقدار را به عنوان اندازه جدول در نظر بگیرید. برای اجرای الگوریتم کافی است
خوب که این اندازه به ترتیب بزرگی اندازه واقعی جدول است.

پیش‌فرض این است که اندازه‌های جدول را پرس و جو کنید که در صورت تنظیم این گزینه از آن صرفنظر می‌شود.

"--source-1='DBI:...'"، "--source-2='...'" یا "-1 '...'، "-2 '...'"
کنترل کامل مشخصات منبع داده DBI را در دست بگیرید و عمدتاً مقایسه را نادیده بگیرید
بخشی از احراز هویت آدرس های منبع یا مقصد. می توان با آن ارتباط برقرار کرد
"DBI:Pg:service=backup"، از یک درایور جایگزین استفاده کنید، هر گزینه ای را که مجاز است تنظیم کنید
درایور... برای گزینه های مختلفی که می توان به کتابچه راهنمای "DBD::Pg" و "DBD:mysql" مراجعه کنید
از طریق مشخصات منبع داده DBI تنظیم شود. با این حال، سرور پایگاه داده مشخص شده است
در URL باید با این مشخصات منبع سازگار باشد تا پرس و جوها
نحو درستی است.

پیش فرض تکیه بر دو آرگومان URL است.

"--skip-inserts"، "--skip-updates"، "--skip-deletes"
هنگام همگام سازی، این عملیات را انجام ندهید.

پیش فرض در زیر "--synchronize" انجام همه عملیات است.

"--stats=(txt|csv)"
نمایش آمارهای مختلف در مورد مقایسه انجام شده در این قالب. همچنین، گزینه
"--stats-name" به تست یک نام می دهد که برای تولید فایل های csv مفید است
به صورت خودکار پردازش می شود.

پیش فرض است نه برای نشان دادن آمار، زیرا به همگام سازی های اضافی و
لزوما برای کاربر جالب نیست.

"--synchronize" یا "-S"
در واقع عملیاتی را برای همگام سازی جدول دوم با جدول اول انجام دهید. خوب، نه
در واقع، این فقط یک اجرا خشک است. اگر "--do-it" یا "-D" را اضافه کنید در واقع انجام می شود. صرفه جویی
اطلاعات خود را قبل از اقدام به چنین چیزی!

پیش فرض همگام سازی نیست.

"--موقت"، "--بدون موقت"
اینکه آیا از جداول موقت استفاده شود. اگر این کار را نکنید، جداول به طور پیش‌فرض در قسمت نگه داشته می‌شوند
پایان، بنابراین آنها باید با دست حذف شوند. برای درخواست a به گزینه "--clear" مراجعه کنید
پاک کردن. این گزینه برای رفع اشکال مفید است.

پیش‌فرض استفاده از جداول موقتی است که به صورت خودکار پاک می‌شوند
اتصال بسته است

"--unlogged"، "--no-unlogged"
از جداول ثبت نشده برای ذخیره چک‌سام استفاده کنید. این جداول تراکنشی نیستند، بنابراین
ممکن است کمی کارها را تسریع کند. با این حال، آنها به طور خودکار در محل تمیز نمی شوند
پایان. برای درخواست پاکسازی، گزینه "--clear" را ببینید.

پیش فرض این است که از جداول بدون لاگ استفاده نکنید.

"--threads" یا "-T"، "--no-threads" یا "-N"
ویژگی بسیار تجربی.

سعی کنید از نخ ها برای انجام محاسبات به صورت موازی استفاده کنید، زیرا
مدل رشته پرل واقعاً با DBI خوب کار نمی کند. نخ های پرل نسبتاً سنگین هستند
و کند، بیشتر شبیه فرآیندهای ارتباطی است تا رشته های سبک.

این به هیچ وجه با PostgreSQL کار نمی کند. این کار تا حدی با MySQL، در
قیمت خاموش کردن "--تراکنش".

پیش فرض است نه برای استفاده از رشته ها، زیرا برای همه پایگاه های داده کار نمی کند.

"--timeout n"
مقایسه مهلت زمانی بعد از "n" ثانیه.

پیش فرض بدون مهلت است. صبور باش.

"--تراکنش"، "--بدون معامله"
اینکه آیا کل الگوریتم را در یک تراکنش جمع کنیم.

پیش‌فرض استفاده از تراکنش بسته‌بندی است، زیرا به نظر می‌رسد سریع‌تر و ایمن‌تر باشد
همینطور

"--tuple-checksum='tcs'" یا "--tcs=..."
از ویژگی تاپل چک جمع این نام استفاده کنید، که باید از قبل در این نام موجود باشد
جداول برای مقایسه این گزینه نیاز به تنظیم "--use-key" یا
"--key-checksum=..." در بالا. ویژگی های جمع کنترل ارائه شده نباید در نشان داده شود
لیستی از ستون های کلید و ارزش همچنین برای نحوه تنظیم a به بخش EXAMPLES زیر مراجعه کنید
ماشه چک جمع

پیش‌فرض این است که هم چک‌جمع‌های کلیدی و هم جمع‌آوری‌شده را در لحظه بسازید.

"--use-key" یا "-u"
اینکه آیا مستقیماً از مقدار کلید برای توزیع تاپل ها در بین شاخه ها استفاده شود. در
کلید باید ساده، عدد صحیح، NULL نباشد و به طور مساوی توزیع شده باشد. اگر شما یک
کلید اصلی اعداد صحیح را به طور منطقی پخش کنید، برای جلوگیری از نیمی از این گزینه استفاده کنید
محاسبات هش جدول کنترلی

پیش‌فرض این است که کلید را هش کنید تا هر نوع، ترکیب و توزیعی را مدیریت کنید.

"--use-null"، "--no-use-null"
استفاده از اطلاعاتی که یک ستون NOT NULL اعلام شده است تا ساده شود
محاسبات با اجتناب از فراخوانی به COALESCE برای رسیدگی به مقادیر NULL.

پیش فرض استفاده از این اطلاعات به قیمت فراداده جدول پرس و جو است.

"--کلمه" یا "-v"
درباره آنچه در حال رخ دادن است پرحرف باشید. هر چه بیشتر بپرسید پرمخاطب تر است.

پیش فرض این است که ساکت باشید، به طوری که هشدارها یا خطاهای احتمالی برجسته شوند.

"--نسخه" یا "-V"
نمایش اطلاعات نسخه و خروج.

"--where=..."
شرط بولی SQL در تاپل های جدول برای مقایسه جزئی. مفید برای کاهش
اگر می دانید که تفاوت های مورد انتظار در برخی از بخش های داده های شما وجود دارد، آن ها را بارگذاری کنید
زمان مهر امروز... شرط یکسانی از هر دو طرف است، بنابراین هر دو جدول باید
خیلی شبیه باشد تا کار کند معمولاً اینطور است.

پیش فرض مقایسه کل جداول است.

ادله


این دو آرگومان اتصالات پایگاه داده را با نحو URL مانند زیر توصیف می کنند
براکت های مربع قسمت های اختیاری را نشان می دهند. بسیاری از قسمت ها با پیش فرض اختیاری هستند. حداقل
مشخصات نحوی صحیح "/" است، اما این لزوما به معنای چیزی نیست
مفید است

[driver://][login[:pass]@][host][:port]/[base/[[schema.]table[?key[:cols]]]]

بخش EXAMPLES در زیر و همچنین گزینه های "--source-*" در بالا را ببینید.

توجه داشته باشید که برخی از مقادیر پیش فرض استفاده شده توسط درایورهای DBI ممکن است با درایور خاص تغییر کند
متغیرهای محیطی، و اینکه DBI نیز پیش‌فرض‌ها و نادیده‌گیری‌های خود را فراهم می‌کند، پس چه می‌شود
در واقع ممکن است همیشه روشن نباشد. مقادیر پیش‌فرض برای URL دوم بیشتر هستند
از آدرس اول گرفته شده است.

راننده
درایور پایگاه داده برای استفاده استفاده کنید pgsql برای PostgreSQL، خروجی زیر برای MySQL، sqlite برای SQLite.
پایگاه داده های ناهمگن ممکن است مقایسه و همگام شوند، اما مراقب باشید که ظریف است
مسائل مربوط به تایپ، کدگذاری و ریخته گری ممکن است از مقایسه ناهمگن جلوگیری کند
همگام سازی برای موفقیت پیش فرض است pgsql برای اولین اتصال، و مانند
اول برای دوم

برای SQLite، بخش احراز هویت URL (ورود، عبور، میزبان، پورت) مورد انتظار است.
برای خالی بودن، بنابراین URL کامل باید به شکل زیر باشد:

sqlite:///base.db/table?key,col:other,columns

علاوه بر این، متغیر محیطی PGC_SQLITE_LOAD_EXTENSION را با
فایل های اشیاء مشترک ":"-separated آنها را در SQLite بارگذاری می کند.

ورود
برای استفاده در هنگام اتصال به پایگاه داده وارد شوید. پیش فرض نام کاربری برای اولین اتصال است،
و مانند اتصال اول برای دوم.

عبور
رمز عبور برای استفاده در هنگام اتصال به پایگاه داده توجه داشته باشید که قرار دادن یک ایده بد است
رمز عبور به عنوان آرگومان فرمان پیش فرض هیچ کدام برای اولین اتصال، و
رمز عبور مشابه اولین اتصال برای دوم if اتصال را هدف قرار می دهد
همان هاست، پورت و از همان ورود استفاده می کند. همچنین به "--ask-pass" و "--env-pass" مراجعه کنید
گزینه.

میزبان
نام میزبان یا IP برای اتصال. پیش فرض رشته خالی است که به معنای اتصال به است
پایگاه داده در لوکال هاست با سوکت یونیکس.

بندر
پورت TCP-IP برای اتصال. پیش فرض برای PostgreSQL 5432 و برای MySQL 3306 است.

پایه
کاتالوگ پایگاه داده برای اتصال. پیش فرض نام کاربری برای اولین اتصال است. پیش فرض است
مانند اتصال اول برای اتصال دوم. برای SQLite، فایل پایگاه داده را ارائه دهید
نام. مسیر به طور پیش‌فرض نسبی است، اما می‌توان با پیش‌فرض کردن یک آن را مطلق کرد
'/' اضافی:

sqlite:////var/cache/sqlite/base.db/table?...

طرحواره.جدول
جدول احتمالاً واجد شرایط طرحواره برای مقایسه. بدون پیش فرض برای اول
ارتباط. پیش فرض همان اتصال اول برای اتصال دوم است.

توجه داشته باشید که MySQL ندارد طرح ها، اما به اندازه کافی عجیب آنها پایگاه داده مفهوم است
درست مثل یک طرح، بنابراین MySQL واقعاً ندارد پایگاه های داده، اگرچه وجود دارد
چیزی از آن نام آیا من روشن هستم؟

کلید
لیست ستون های کلیدی جدا شده با کاما. پیش فرض کلید اصلی جدول برای اولین بار است
ارتباط. پیش فرض همان اتصال اول برای اتصال دوم است. کلید
نمی توان خالی باشد اگر راهی برای شناسایی تاپل های خود ندارید، پس وجود ندارد
نقطه در جستجوی تفاوت ها

یقه
فهرستی از ستون‌های جدا شده با کاما برای مقایسه. ممکن است خالی باشد پیش فرض همه ستون هاست اما
کلید برای اولین اتصال پیش فرض همان اتصال اول برای اتصال دوم است.
مراقب باشید که "...?key:" به معنای کلید خالی است، در حالی که "...?key" پیش فرض را با تنظیم می کند
فراداده جدول پرس و جو

مثال ها


جداول calvin و hobbes را در خانواده پایگاه داده در localhost با کلید مقایسه کنید id و ستون ها
c1 و c2:

./pg_comparator /family/calvin?id:c1,c2 /family/hobbes

جداول calvin را در پایگاه داده پیش فرض در لوکال هاست و همان جدول را در حالت پیش فرض مقایسه کنید
پایگاه داده در سابلون ها، با کلید id و ستون داده ها:

./pg_comparator localhost/family/calvin?id:data sablons/

همگام سازی جدول "user" در پایگاه داده "wikipedia" از MySQL در "server1" به PostgreSQL در
"سرور 2".

./pg_comparator -S -D --ask-pass \
mysql://calvin@server1/wikipedia/user pgsql://hobbes@server2/

برای PostgreSQL، می‌توانید کلیدهای محفظه‌دار و جمع‌بندی‌های چک تاپل را به‌صورت زیر اضافه کنید:

-- TABLE Foo(id SERIAL PRIMARY KEY, data ... NOT NULL);
- یک کلید و ویژگی های چک جمع چندگانه اضافه کنید
- اگر از --use-key استفاده کنید، می توان از جمع کنترلی کلید صرف نظر کرد،
-- که برای آن کلید باید یک عدد صحیح NOT NULL ساده باشد.
ALTER TABLE Foo
ADD COLUMN key_cs INT4 NOT NULL DEFAULT 0،
اضافه کردن ستون tup_cs INT8 NOT NULL پیش فرض 0;
- عملکرد به روز رسانی چک جمع تاپل
- اگر برخی از ویژگی ها ممکن است NULL باشند، باید با هم ترکیب شوند
CREATE FUNCTION foo_cs() TRIGGER را به صورت $$ برمی گرداند
شروع
- محاسبه جمع کلیدی
NEW.key_cs = cksum4(NEW.id);
- جمع چکی تاپلی را محاسبه کنید
NEW.tup_cs = cksum8(NEW.id || '|' || NEW.data);
بازگشت جدید؛
پایان؛ $$ LANGUAGE plpgsql;
-- تنظیم ماشه برای فراخوانی تابع به روز رسانی چک جمع
ایجاد TRIGGER foo_cs_trigger
قبل از به‌روزرسانی یا درج در Foo
برای هر سطر EXECUTE PROCEDURE foo_cs();
- اگر جدول Foo در ابتدا خالی نباشد،
- محتویات آن را به‌روزرسانی کنید تا محاسبات جمع کنترلی را فعال کند
به روز رسانی Foo SET id=id;

سپس یک مقایسه سریع، که نیازی به محاسبه جدول چک اولیه ندارد، می تواند باشد
درخواست شده با:

./pg_comparator --tcs=tup_cs --kcs=key_cs \
admin@server1/app/Foo?id:data hobbes@server2/

از آنجایی که کلید اولیه یک عدد صحیح ساده است، the key_cs می تواند کنار گذاشته شود و مقایسه شود
می تواند با:

./pg_comparator --tcs=tup_cs --use-key \
admin@server1/app/Foo?id:data hobbes@server2/

OUTPUT


خروجی فرمان شامل خطوطی است که تفاوت های موجود بین آن ها را توصیف می کند
دو میز آنها به صورت درج، به روز رسانی یا حذف و چندگانه بیان می شوند
کلیدها

بروزرسانی k
کلید k tuple از جدول 1 به جدول 2 به روز می شود. در هر دو جدول با وجود دارد
ارزش های مختلف

INSERT k
کلید k tuple در جدول 2 ظاهر نمی شود، بلکه فقط در جدول 1 ظاهر می شود. باید در آن درج شود
جدول 2 برای همگام سازی آن در جدول 1.

حذف k
کلید k tuple در جدول 2 ظاهر می شود، اما در جدول 1 نیست. باید از 2 تا حذف شود
آن را در جدول 1 همگام کنید.

در صورت برخورد تاپل چکسام، نتایج منفی کاذب ممکن است رخ دهد. تغییر دادن
تابع checksum در چنین مواردی کمک خواهد کرد. به بخش فرعی ANALYSIS مراجعه کنید.

وابستگی ها


سه تابع پشتیبانی در پایگاه داده مورد نیاز است:

1.
تابع "COALESCE" از مقادیر NULL در ستون ها مراقبت می کند.

2.
برای کاهش و توزیع مقادیر کلید و ستون باید از یک تابع چک جمع استفاده شود. ممکن است
با گزینه "--checksum" تغییر دهید. اندازه آن را می توان با انتخاب کرد
گزینه "--checksize" (در حال حاضر 2، 4 یا 8 بایت). چک‌سام‌ها نیز نیاز به گچ‌گیری دارند
به اعداد صحیح با اندازه های مختلف تبدیل می شود.

پیاده سازی های مناسب برای PostgreSQL در دسترس هستند و می توانند در سرور بارگذاری شوند
با پردازش "share/contrib/pgc_checksum.sql" و "share/contrib/pgc_casts.sql". جدید
چک‌سام‌ها و کست‌ها نیز برای MySQL در دسترس هستند، به "mysql_*.sql" مراجعه کنید. قابل بارگیری
اجرای توابع چک جمع مناسب نیز برای SQLite موجود است، ببینید
"sqlite_checksum.*".

چک جمع "ck" بر اساس هش جنکینز است ،
که متکی بر عملیات ساده add، shift و xor integer است. چک جمع "fnv" است
با الهام از هش FNV (64 بیت 1a
نسخه) که از عملیات xor و mult عدد صحیح استفاده می کند، اگرچه من مقداری shift را نیز اضافه کردم
و اضافه کنید تا به نیشگون گرفتن و کشیدن بیت های بالا کمک کند.

3.
یک تابع تجمیع برای خلاصه کردن جمع‌های چک برای محدوده‌ای از ردیف‌ها استفاده می‌شود. آن باید
بر روی نتیجه تابع چک جمع عمل کنید. ممکن است با
گزینه "--Aggregate".

پیاده‌سازی‌های مناسب یک مجموعه انحصاری یا "xor" برای PostgreSQL موجود است
و می توان با پردازش "share/contrib/xor_aggregate.sql" در سرور بارگذاری کرد.

فایل "sqlite_checksum.*" همچنین یک مجموعه "xor" و "sum" برای SQLite ارائه می کند که
با سایر پایگاه های داده سازگار هستند.

علاوه بر این چندین ماژول perl برای اجرای این اسکریپت مفید هستند:

· "Getopt::Long" برای مدیریت گزینه.

· "DBI"، "DBD::Pg" برای اتصال به PostgreSQL، "DBD::mysql" برای اتصال به MySQL، و
"DBD::SQLite" برای اتصال به SQLite.

· "Term::ReadPassword" برای گزینه "--ask-pass".

· "Pod::Usage" برای خود استخراج سند ("--man" "--opt" "--help").

· "رشته ها" برای نسخه آزمایشی رشته ای با گزینه "--threads".

· "Digest::MD5" برای md5 checksum با SQLite.

ماژول ها فقط در صورتی توسط اسکریپت بارگذاری می شوند که واقعاً مورد نیاز باشند.

الگوریتم


هدف از الگوریتم مقایسه محتوای دو جدول، احتمالاً بر روی متفاوت است
سرورهای راه دور، با حداقل ترافیک شبکه. در سه فاز انجام می شود.

1.
یک جدول چک جمع در هر طرف برای جدول هدف محاسبه می شود.

2.
یک جدول خلاصه سطح اول در هر طرف با جمع کردن تکه‌های آن محاسبه می‌شود
جدول چک جمع سپس سطوح دیگر تجمعات خلاصه انجام می شود تا زمانی که وجود داشته باشد
فقط یک سطر در آخرین جدول، که سپس یک جمع‌بندی جهانی برای کل ذخیره می‌کند
جداول هدف اولیه

3.
با شروع از جداول خلاصه بالا، جمع‌بندی‌های چک از هر دو مقایسه می‌شوند
طرفین برای جستجوی تفاوت ها، تا جدول چک جمع اولیه. کلیدهای متفاوت
تاپل ها نمایش داده می شوند.

چک جدول
مرحله اول، جدول چک جمع اولیه را محاسبه می کند T(0) در هر طرف فرض کنید که کلید
ستون های کلید جدول است و یقه ستون های داده جدول است که باید بررسی شوند
تفاوت، سپس با پرس و جو جدول هدف انجام می شود T به شرح زیر:

ایجاد جدول T(0) AS
کلید SELECT AS pk, -- کلید اصلی
چک جمع (کلید) AS kcs، -- جمع چک کلید
چک‌سوم(کلید || cols) AS tcs -- جمع‌بندی چندگانه
از t;

کلید اولیه حفظ می شود، زیرا از آن برای نمایش کلیدهای مختلف در پایان استفاده می شود. در
منطقی برای کیلوگرم ستون عبارت است از تصادفی کردن توزیع کلید-مقدار به منظور تعادل
مصالح در فاز بعدی کلید نیز باید در checksum ظاهر شود، در غیر این صورت محتوا
رد و بدل شده بین دو کلید در برخی موارد شناسایی نمی شود.

خلاصه جداول
اکنون مجموعه ای از جداول خلاصه آبشاری را با گروه بندی محاسبه می کنیم f (ضریب تاشو) چک جمع ها
با هم در هر مرحله گروه بندی بر اساس یک ماسک بر روی است کیلوگرم ستونی برای گرفتن
مزیت تصادفی‌سازی جمع چک. شروع از p = 0 ما می سازیم:

جدول T(p+1) AS را ایجاد کنید
SELECT kcs & mask(p+1) AS kcs، -- زیر مجموعه جمع کنترل کلید
XOR(tcs) AS tcs -- جمع بندی چکی چندگانه
از T(p)
گروه بر اساس kcs و ماسک (p+1)؛

ماسک(p) طوری تعریف می شود که به طور متوسط ​​با هم گروه بندی می شود f چک جمع ها با هم: ماسک(0)
= ceil2 (اندازه)؛ mask(p) = mask(p-1)/f; این منجر به سلسله مراتبی از جداول می شود که هر کدام وجود دارند
خلاصه ای کوچکتر از قبلی:

سطح 0
جدول چک جمع، اندازه ردیف ها، یعنی به تعداد ردیف های جدول هدف.

سطح 1
اولین جدول خلاصه، سطرها (اندازه/f).

سطح p
جدول خلاصه متوسط، ردیف (اندازه/f**p).

سطح n-1
یک قبل از آخرین جدول خلاصه، کمتر از f ردیف.

سطح n
آخرین جدول خلاصه، ماسک 0، 1 ردیف است.

مهم است که از ماسک های یکسان در هر دو طرف استفاده شود تا تجمع شود
به همین ترتیب، امکان مقایسه مطالب مطابق در هر دو طرف را فراهم می کند.

جستجو برای تفاوت
پس از اینکه همه این جداول پشتیبانی در هر دو طرف ساخته شدند، جستجو برای تفاوت ها آغاز می شود.
هنگام بررسی خلاصه جمع بندی آخرین جداول (سطح n) تنها با یک ردیف، آن است
اساساً مقایسه ای از جمع کنترلی کل محتویات جدول. اگر مطابقت دارند، پس
هر دو جدول برابر هستند و کار ما تمام شده است. در غیر این صورت، اگر این چک جمع ها متفاوت باشد، برخی
تحقیقات برای شناسایی کلیدهای متخلف مورد نیاز است.

بررسی با پایین رفتن سلسله مراتب جدول و جستجوی همه انجام می شود کیلوگرم
که در سطح قبلی تفاوتی در چک‌سوم وجود داشت. همان پرس و جو است
در هر مرحله در هر دو طرف انجام می شود:

kcs، tcs را انتخاب کنید
از T(p)
WHERE kcs & mask(p+1) IN (kcs-with-diff-checksums-from-level-p+1)
ترتیب بر اساس kcs [و در سطح 0: , id];

و نتایج هر دو طرف با هم ادغام می شوند. هنگام انجام روش ادغام، چهار
موارد ممکن است ایجاد شود:

1.
هر دو کیلوگرم و تی سی همخوانی داشتن. اونوقت فرقی نداره

2.
هر چند کیلوگرم مطابقت دارد، تی سی نمی کند. بعد این کیلوگرم قرار است در آینده بررسی شود
سطح، از آنجا که خلاصه چک متفاوت است. اگر ما در حال حاضر در آخرین سطح هستیم، پس
کلید متخلف را می توان نشان داد.

3.
نه کیلوگرم مطابقت، یک مکمل کیلوگرم در سمت اول بعد این کیلوگرم مرتبط به
کلید(هایی) که باید برای همگام سازی جدول دوم با جدول اول وارد شوند.

4.
نه کیلوگرم مطابقت، یک مکمل کیلوگرم در سمت دوم بعد این کیلوگرم مرتبط به
کلید(هایی) که برای همگام سازی جدول دوم و جدول اول باید حذف شوند.

موارد 3 و 4 به سادگی متقارن هستند و تنها یک تفسیر برای تصمیم گیری است
این یک درج یا یک حذف است که طرف اول را به عنوان مرجع در نظر می گیرد.

تحلیل و بررسی
اجازه دهید n تعداد ردیف ها باشد، r اندازه ردیف، f عامل تاشو، k تعداد
تفاوت هایی که باید شناسایی شوند، c اندازه جمع کنترلی به بیت، سپس هزینه های شناسایی
تفاوت ها و میزان خطا عبارتند از:

شبکه حجم
از ... بهتر است k*f*ceil(log(n)/log(f))*(c+log(n)). محتویات k بلوک های اندازه f
بر روی عمق درخت منتقل می شود و هر شناسه بلوک دارای اندازه است ورود (n) و
شامل یک چک جمع است c. مستقل از r، و شما می خواهید k<<n. حجم از
درخواست های SQL در مورد است k*log(n)*ceil(log(n)/log(f))، به عنوان لیستی از عدم تطابق
چک باکس k*log(n) ممکن است روی عمق درخت کشیده شود.

عدد of درخواست (بر هر سمت، la الگوریتم is متقارن)
حداقل است 6+ سقف (log(n)/log(f)) برای جداول مساوی، حداکثر است 6+2*سقف(log(n)/log(f)).

دیسک I / O ترافیک
در مورد n*r+n*ln(n)*(f/(f-1)).

غلط منفی احتمال
به عنوان مثال بخشی از جداول با وجود اینکه متفاوت هستند، برابر در نظر گرفته می شوند. با یک
تابع جمع کنترلی کامل، این احتمال برخورد جمع کنترلی در هر نقطه است
جایی که آنها محاسبه می شوند و باید متفاوت باشند: در مورد
k*ceil(log(n)/log(f))*2**-c. برای جدول یک میلیون ردیفی، انتظار 1000 تغییر با
مقادیر پارامتر الگوریتم پیش‌فرض، این حدود است 2 ** 10 *3/2**64، که حدود یک است
شانس در 2 ** 52 اجراهای ادغام

هر چه ضریب تاشو کمتر باشد f برای حجم شبکه بهتر است، اما بیشتر است
بهتر است برای تعداد درخواست ها و ورودی/خروجی دیسک: انتخاب f یک معامله است

هر چه اندازه چک‌سوم کمتر باشد c، برای حجم شبکه بهتر است، اما برای حجم شبکه بدتر است
احتمال منفی کاذب

اگر پهنای باند موجود معقول باشد، مقایسه به احتمال زیاد محدود به cpu خواهد بود:
زمان به طور عمده صرف محاسبه جدول چک اولیه می شود. بنابراین اگر شما هستند
برنامه‌ریزی برای بررسی تفاوت‌ها اغلب، حفظ یک چک‌سوم چندگانه را در نظر بگیرید
یک ماشه، و احتمالاً یک جمع کنترل کلیدی نیز، و با "--tuple-checksum" و
یا "--key-checksum" یا "--use-key".

پیاده سازی مسائل
اجرای چک‌سوم اعداد صحیحی را می‌دهد که طول ثابتی دارند و به راحتی قابل استفاده هستند
بعد دستکاری کنید

La XOR سنگدانه انتخاب خوبی است زیرا مشکلی برای سرریز وجود ندارد
تمام بیت های ورودی را در نظر بگیرید و به راحتی می توان آن را بر روی هر داده باینری تعریف کرد. در
مجموع aggregate نیز مشکلی ندارد، اما به نوعی از نوع عدد صحیح اساسی نیاز دارد.

مقادیر NULL باید به درستی مورد توجه قرار گیرند.

ضریب تاشو و تمام ماژول ها برای استفاده از ماسک به عنوان توان دو در نظر گرفته شده است.

یک مدیریت ویژه از تکه های بزرگ حذف یا درج وجود دارد که اجرا می شود
اگرچه در بررسی اجمالی الگوریتمی و تجزیه و تحلیل پیچیدگی جزئیات وجود ندارد.

تلاش‌هایی برای ایجاد یک پیاده‌سازی سازگار PostgreSQL/MySQL وجود دارد
الگوریتمی که هک هایی را برای مقابله با تبدیل نوع و موارد دیگر اضافه می کند.

این اسکریپت به طور منطقی تست شده است، اما به دلیل اثبات ماهیت مفهومی آن، موارد زیادی وجود دارد
گزینه هایی که ترکیب آنها را نمی توان همه آزمایش کرد.

توجه داشته باشید
اگر جداول مورد مقایسه در یک پایگاه داده باشند، یک پرس و جو ساده SQL می تواند آن را استخراج کند
تفاوت. جداول فرضی T1 و T2 با کلید اصلی id و مطالب غیر پوچ داده ها,
سپس تفاوت آنها، این است که چگونه T2 با مرجع متفاوت است T1، توسط خلاصه شده است
پرس و جو زیر:

SELECT COALESCE(T1.id، T2.id) به عنوان کلید،
زمانی که T1.id تهی است، «حذف»
وقتی T2.id NULL است، «درج»
"به روز رسانی" دیگر
END AS عملیات
FROM T1 FULL Join T2 با استفاده از (id)
جایی که T1.id تهی است -- DELETE
یا T2.id تهی است -- INSERT
OR T1.data <> T2.data -- UPDATE

مراجع
مقاله ای در یک کنفرانس در مورد این ابزار و الگوریتم آن ارائه شد: دور مقایسه
of پایگاه داده جداول by فابین کوئلیو، در سومین کنفرانس بین المللی پیشرفت ها در
پایگاه های داده، دانش و برنامه های کاربردی داده (DBKDA)، صفحات 23-28، سنت مارتین، هلند
آنتیل، ژانویه 2011. ISBN: 978-1-61208-002-4. حق چاپ IARIA 2011. آنلاین در Think
ذهنhttp://www.thinkmind.org/index.php?view=article&articleid=dbkda_2011_2_10_30021>.

الگوریتم و اسکریپت الهام گرفته شده است طعنه زدن la توزیع شده پایگاه داده مشکل: در A مورد
مهاجرت تحصیلی با استفاده از خروجی by جوزپه ماکسیا in بچه ها مدیر سایت vol 13 num 8, Aug 2004, pp 29-40. دیدن
پرل راهبانhttp://www.perlmonks.org/index.plبرای جزئیات ?node_id=381053>. در این صفحه،
سه الگوریتم ارائه شده است. اولی دو جدول را با یک چک‌سام مقایسه می‌کند
تکنیک. مورد دوم تفاوت‌های UPDATE یا INSERT را بر اساس یک 2 سطح (checksum) پیدا می‌کند
و خلاصه) سلسله مراتب جدول. الگوریتم نامتقارن است، همانطور که پرس و جوهای مختلف هستند
بر روی دو جدول برای مقایسه انجام می شود. به نظر می رسد حجم ترافیک شبکه در حال حاضر است
k*(f+(n/f)+r)، که یک رویه ادغام احتمالی باگ دارد و باعث می شود
مفروضات در مورد توزیع مقادیر کلیدی الگوریتم سوم به دنبال DELETE است
تفاوت های مبتنی بر شمارش، با این فرض ضمنی که فقط چنین هستند
تفاوت.

در مقابل این رویکرد، الگوریتم کاملا متقارن ما هر سه کار را اجرا می کند
برای پیدا کردن UPDATE، DELETE و INSERT بین دو جدول. چک جمع و
ایده سطح سلسله مراتبی خلاصه مجدداً مورد استفاده قرار می گیرد و تعمیم می یابد تا الگوریتمی کاهش یابد
پیچیدگی

از نقطه نظر پیاده سازی، اسکریپت تا آنجا که ممکن است با بسیاری پارامتریک است
گزینه ها، و فرضیات کمی در مورد ساختار جدول، انواع و مقادیر می کند.

با استفاده از خدمات onworks.net از pg_comparator به صورت آنلاین استفاده کنید


سرورها و ایستگاه های کاری رایگان

دانلود برنامه های ویندوز و لینوکس

  • 1
    OfficeFloor
    OfficeFloor
    OfficeFloor وارونگی را فراهم می کند
    کنترل جفت، با آن: - وابستگی
    تزریق - ادامه تزریق -
    تزریق نخ برای اطلاعات بیشتر
    بازدید از ...
    OfficeFloor را دانلود کنید
  • 2
    DivKit
    DivKit
    DivKit یک سرور منبع باز است
    چارچوب UI (SDUI). به شما اجازه می دهد
    به روز رسانی های منبع سرور را منتشر کنید
    نسخه های مختلف برنامه همچنین، می تواند باشد
    استفاده شده برای ...
    DivKit را دانلود کنید
  • 3
    مبدل فرعی
    مبدل فرعی
    ابزار تبدیل بین انواع مختلف
    فرمت اشتراک کاربران Shadowrocket
    باید از ss، ssr یا v2ray به عنوان هدف استفاده کنید.
    می توانید &remark= را به آن اضافه کنید
    HT مورد پسند تلگرام...
    دانلود زیر مبدل
  • 4
    SWASH
    SWASH
    SWASH یک عدد عددی همه منظوره است
    ابزاری برای شبیه سازی ناپایدار،
    غیر هیدرواستاتیک، سطح آزاد،
    جریان چرخشی و پدیده های حمل و نقل
    در آب های ساحلی به عنوان ...
    SWASH را دانلود کنید
  • 5
    VBA-M (بایگانی شده - اکنون در Github)
    VBA-M (بایگانی شده - اکنون در Github)
    پروژه به
    https://github.com/visualboyadvance-m/visualboyadvance-m
    ویژگی ها: تقلب ایجاد ذخیره statesmulti
    سیستم، پشتیبانی از gba، gbc، gb، sgb،
    sgb2tu ...
    دانلود VBA-M (بایگانی شده - اکنون در Github)
  • 6
    استرس
    استرس
    بهینه ساز و مانیتورینگ سیستم لینوکس
    مخزن Github:
    https://github.com/oguzhaninan/Stacer.
    مخاطب: کاربران نهایی/رومیزی. کاربر
    رابط: Qt. برنامه نویسی لا...
    استیسر را دانلود کنید
  • بیشتر "

دستورات لینوکس

Ad