PDA

View Full Version : سوال: راهکار برای برنامه جهت همگام سازی دو database



ehsan#baharangiz
یک شنبه 13 خرداد 1397, 20:05 عصر
با سلام
من یه پروژ میخوام انجام بدم که کار بصورت لوکال و در همان بانک اطلاعاتی همراه برنامه ذخیره بشه و امکان ارسال اطلاعات به سرور اصلی در جایی که اینترنت در دسترس باشد وجود داشته باشد ممنون میشم یک راه کار برای نوشتن چنین برنامه ای در سی شارپ مطرح کنید.

ali_md110
یک شنبه 13 خرداد 1397, 22:53 عصر
میتونید برنامه ای بنویسید web baseترجیحا و در کامپیوتر لوکال قابل اجرا باشد
و توسط IP Static از ظریق وب به دیتابیس یا این نرم افزار در کامپیوتر لوکال دسترسی داشت

ehsan#baharangiz
جمعه 18 خرداد 1397, 00:50 صبح
سلام دوست عزیز ممنونم از نظرتون ولی میخوام امکان ثبت اطلاعات به صورت آفلاینم وجود داشته باشه و کاربر در جایی که به اینترنت دسترسی داره بتونه اطلاعاتو انتقال بده و به سرور ارسال کنه

ali_md110
جمعه 18 خرداد 1397, 14:46 عصر
من جوابتون در پست قبلی دادم
کامپیوتر لوکال شما میشه سرور شما و از طریق آی پی استاتیک به اون دسترسی دارید
همچنین میتونید یک نسخه تحت وب برنامتون که در یک هاستینگ مستقر شده به منابع این سرور منجمله دیتابیس دسترسی داشته باشد

Mahmoud Zaad
جمعه 18 خرداد 1397, 18:12 عصر
سلام
اگر برداشت من صحیح باشه در پروژه شما ارتباط با سرور به صورت دائمی نیست و مقطعی هست. در اینجا چالش اصلی همگام سازی اطلاعات هست. اگر مثلاً برنامه حسابداری باشه ما چند دسته اطلاعات داریم.
1-اطلاعات اصلی و پیکربندی حسابها که بین همه شعبه ها یکسان هست.
2-اطلاعات خاص هر شعبه مثل مشتریان و بازاریابها و فروشنده ها
3-اطلاعاتی مثل دریافتها و پرداخت ها و خرید و فروش ها و ...

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

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

ehsan#baharangiz
شنبه 26 خرداد 1397, 16:19 عصر
با سلام
دقیقا شما درست متوجه شدین بزرگترین مشکل من همگام سازی اطلاعاته
ممنون میشم دوستانی که تجربه دارن یک روش اصولی و بهینه برای این کار معرفی کنن یا اگه اس کیو ال سرور ابزاری برای این کار داره بفرمایید
با تشکر

ehsan#baharangiz
شنبه 26 خرداد 1397, 16:21 عصر
امکان استفاده از هاست و جود نداره ما فقط باید با سرور اصلی برنامه دسترسی داشته باشیم اونم با ای پی ولید
ما مشکل اصلیمون همگام سازی اطلاعاته یه جوری که تو حجم بالا مشکلی پیش نیاد و این که از په روشی برای همگام سازی استفاده کنیم

Mahmoud.Afrad
شنبه 26 خرداد 1397, 19:10 عصر
https://www.mssqltips.com/sqlservertip/4545/synchronizing-sql-server-data-using-rowversion

ابزار open source هم هست
https://github.com/OpenDBDiff/OpenDBDiff
https://github.com/Mimetis/Dotmim.Sync

ehsan#baharangiz
چهارشنبه 06 تیر 1397, 00:58 صبح
با سلام
ممنون از پاسختون
این چه ابزاریه بیشتر میتونید توضیح بدید؟
من با replication چک کردم شدنی بود به نظرتون اشکالی در آینده پیش نمیاد برای استفاده از replication?

sds1920
سه شنبه 12 تیر 1397, 08:08 صبح
من قبلا کاری شبیه به این که شما میگید رو انجام دادم البته در اون حالت برای من امکان Replication نبود.
شما اول از همه باید یک فیلد به هر جدول اضافه کنید که وضعیت Sync بودن یا نبودن رکورد رو با سرور روی شبکه مسخص میکنه. وضعیت هر رکورد میتونه Added,Modified,Deleted,Unchanged باشه و این مقادیر از طریق برنامه کنترل میشه.
بعد از این نیاز دارید به یک برنامه یا سرویس که دائم ارتباط با سرور رو بررسی کنه و هر زمان که ارتباط برقرار شد شروع به Sync کردن رکورد ها بکنه. این کار رو باید جدول به جدول انجام بده.
سمت سرور شبکه هم میتونید از یک وب سرویس بهره بگیرید که نیازی به کانکشن مستقیم به دیتابیس نداشته باشید.
موفق باشید.

Mahmoud.Afrad
سه شنبه 12 تیر 1397, 23:51 عصر
من قبلا کاری شبیه به این که شما میگید رو انجام دادم البته در اون حالت برای من امکان Replication نبود.
شما اول از همه باید یک فیلد به هر جدول اضافه کنید که وضعیت Sync بودن یا نبودن رکورد رو با سرور روی شبکه مسخص میکنه. وضعیت هر رکورد میتونه Added,Modified,Deleted,Unchanged باشه و این مقادیر از طریق برنامه کنترل میشه.
بعد از این نیاز دارید به یک برنامه یا سرویس که دائم ارتباط با سرور رو بررسی کنه و هر زمان که ارتباط برقرار شد شروع به Sync کردن رکورد ها بکنه. این کار رو باید جدول به جدول انجام بده.
سمت سرور شبکه هم میتونید از یک وب سرویس بهره بگیرید که نیازی به کانکشن مستقیم به دیتابیس نداشته باشید.
موفق باشید.

یک راه هم استفاده از rowversion در دیتابیس لوکال هست. در دیتابیس سرور یک جدول میخواهیم با آخرین rowversion سینک شده برای هر دیتابیس لوکال. در زمان برقراری ارتباط، در دیتابیس لوکال سطرهایی که rowversion بزرگتری از مقدار ذخیره شده در سرور دارند بایست sync بشوند.