نکات کاربردی

طبقه بندی موضوعی

آخرین مطالب

۲ مطلب در مرداد ۱۳۹۷ ثبت شده است

change-data-capture-چیست؟

معرفی انواع CDC در MySQL

عملیات CDC را میتوان در هر لایه ای از پروژه انجام داد.

روشهای ضبط تغییرات داده (CDC) در بانکهای اطلاعاتی (databases) :

  1. Timestamps on rows: ستونی در جدول اضافه شود تا تاریخ آخرین تغییر را نشان دهد.

    در MySQL  اینکار از طریق نوع TIMESTAMP قابل پیاده سازی است . مثال عملیاتی

  2. Version Numbers on rows : ستونی در جدول اضافه شود که شماره نسخه را ذخیره میکند . این ستون به ازاء هر تغییر افزوده می شود.
    در
    SQL Server  اینکار از طریق نوع rowversion قابل پیاده سازی است . مستندات

    میتوان از این ستون برای قفل های خوشبیتاته(Optimistic Locking) استفاده شود مانند Hibernate. مطالعه بیشتر 

  3. Status indicators on rows : ستونی از نوع Boolean که در صورت تغییر ردیف مقدار True میگیرد. این ستون می تواند مکمل بخش های قبلی باشد.
  4. Time/Version/Status on rows : سه ستون قبلی هر سه در جدول تعریف می شوند تا بتوان تغییرات داده های جدول را بصورت جامع بررسی کرد.

  5. Triggers:

    1. Database triggers : تعریف Trigger برای جدول روشی برای ثبت تغییرات داده هاست. هر بانک اطلاعاتی ازTriggerپشتیبانی میکند.

    2. Application-level triggers:
      1. Auditing with JPA :
        JPA به صراحت شامل یک auditing API نیست، اما این قابلیت را می توان با استفاده از حوادث چرخه حیات entity بدست آورد. جزییات مثال مثال2 مثال3

      2. Hibernate Envers : چارچوبهایی (frameworks) مانند Hibernate Envers وجود دارد که بانک اطلاعاتی را در سطح برنامه شبیه سازی میکنند. مثال

      3.  Spring Data JPA: مثال 

      4. audit4j :
        برای بررسی وقایع مربوط به سرورها، برنامه ها و پایگاه های داده مورد استفاده قرار گیرد

      5. JaVers : یک کتابخانه سبک جاوا است که برای ضبط تغییر داده هاست.
  6. Event Programming : هر چند این روش نیاز به برنامه نویسی دارد ولی روشی بسیار دقیق و مطلوب تر و انعطاف بیشتری دارد.

  7. Log scanners on databases : استفاده از transaction log بانکهای اطلاعاتی.
    • با توجه به دسترسی نداشتن به مستندات log، پیاده سازی از این طریق چالش بزرگی است.
    • استفاده از این روش نیازی به ایجاد ساختار جدیدی نبوده و صرفا کافی است transaction log خوانده شود.
      هر بانک اطلاعاتی روش خودش را برای خواندن از transaction log دارد بعنوان نمونه :
      - اوراکل GoldenGate را ارائه می دهد.
      -
      SQL Server پشتیبانی از CDC را ارائه می دهد.
      - MySQL، که به طور گسترده ای برای برنامه های کاربردی وب مورد استفاده قرار گرفته است، اجازه می دهد شما را به ضبط رویدادهای CDC از طریق راه حل های 3rd party های مختلف، مانند DataBus LinkedIn
      • برای بانکهای اطلاعاتی مدرن Tracking the capture از دو روش معمول زیر انجام می شود:
        • Database Triggers
        • Reading the transaction log

  8. Debezium :
    Debezium یک پروژه منبع باز جدید است که توسط RedHat اداره می شود که اتصال دهنده های اوراکل، MySQL، PostgreSQL و حتی MongoDB است.
    • با این پروژه نه تنها شما می توانید رویدادهای CDC را استخراج کنید، بلکه می توانید آنها را به Apache Kafka بفرستید، که به عنوان یک ستون فقرات برای تمام پیام های مورد نیاز برای مبادله بین ماژول های مختلف یک سیستم بزرگ سازمان عمل می کند.


behrad nasehi
۱۶ مرداد ۹۷ ، ۱۴:۴۹ موافقین ۰ مخالفین ۰ ۰ نظر

انکودینگ Base64 مکانیزیمی است که در اصل به منظور انکودینگ داده های باینری به فرمت متنی ایجاد شد. انکودینگ Base64 ابتدا در سیستم های ایمیل که نیاز به پیوست داده های باینری همچون تصویر و اسناد متنی داشتند استفاده شد. چرا که این نوع پیوست ها بایستی به فرمت اسکی (ASCII) ارسال می شد.


مجموعه کاراکتری انکودینگ Base64

Base64 حاوی یک مجموعه کاراکتری از کاراکترهای اسکی قابل چاپ می باشد. ۶۲ مقدار اصلی در تمام انواع انکودینگ Base64 یکسان می باشد که شامل :

  • کاراکترهای حروف بزرگ زبان انگلیسی A تا Z
  • کاراکترهای حروف کوچک زبان انگلیسی a-z
  • اعداد ۰ تا ۹

کاراکتر های موجود در ایندکس ۶۲ و ۶۳ بر اساس نوع انکودینگ متفاوت می باشد. این کاراکترها شامل + / , – _ . : ! ~ می باشد. جدول زیر کاراکترهای نسخه اصلی Base64 را نشان می دهد :

انکودینگ base64 - فرآیند انکودینگ Base64 - مجموعه کاراکتری انکودینگ Base64

فرآیند انکودینگ Base64

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

  • داده های باینری یا غیرباینری از سمت چپ به راست خوانده شده
  • سه جفت داده هشت بیتی جداگانه از ورودی گرفته شده تا در مجموعه یک گروه ۲۴ بیتی را ایجاد کند.
  • این گروه ۲۴ بیتی در ادامه به ۴ گروه ۶ بیتی تقسیم می شود.
  • اکنون هر کدام از این شش بیت جداگانه توسط انکودینگ Base64 با استفاده از جدول ایندکس بالا فرمت دهی می شود. چگونه ؟

در مثال زیر واضح توضیح می دهیم . به جدول زیر دقت کنید. در اینجا می خواهیم کلمه God انکودینگ کنیم.

انکودینگ base64 - فرآیند انکودینگ Base64 - مجموعه کاراکتری انکودینگ Base64

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

انکودینگ base64 - فرآیند انکودینگ Base64 - مجموعه کاراکتری انکودینگ Base64

سپس باینری به گروههای ۶ بیتی تبدیل شده. عدد باینری به دسیمال تبدیل شده و بر اساس جدول ایندکس ها معادل آن نوشته می شود. مثلا ایندکس ۱۷ متعلق به کاراکتر R و ایندکس ۳۶ متعلق به کاراکتر k و….

نتیجه اینکه معادل Base64 کلمه God می شود R29k

هرچند یک مشکلی در اینجا پدیدار می شود. اگر حرف ما بر اساس الگوی ۲۴ بیتی نباشد چه باید کرد ؟ مثلا کلمه Netamooz نمی توان آن را با این الگو تطبیق داد. Net می شود ۲۴ بیت , amo می شود ۲۴ بیت و oz می شود ۱۶ بیت !! با ۸ بیت آخر چه باید کرد.

این همان جایی است که مکانیزم پدینگ (Padding) وارد می شود.

پدینگ در انکودینگ Base64

هر کجا که ۸ بیت خالی بماند برای تبدیل شدن آن به یک مجموعه ۲۴ بیتی بایستی با کاراکتر = پر شود. و اگر ۱۶ بیت خالی باشد دو کاراکتر مساوی == اضافه می شود. دقیقا شبیه جدول زیر که به این مکانیزم پدینگ گویند.

انکودینگ base64 - فرآیند انکودینگ Base64 - مجموعه کاراکتری انکودینگ Base64

انکودینگ Base64

شیوه های کدگذاری

استفاده از base64 برای inline کردن عکس

از base64 برای encode کردن باینری به متن استفاده می شود. با استفاده از این تکنیک این امکان وجود دارد که هر عکسی را به صورت داده های متنی ذخیره کرد. خوشبختانه مرورگرهای مختلف می توانند base64 را decode کنند. به عبارت دیگر اگر شما یک عکس را به صورت base64 به صورت inline در فایل HTML در <img> بنویسید، مرورگرها می توانند آن عکس را در صفحه HTML رندر کرده و به کاربر نمایش دهند. به عبارت دیگر با استفاده از این تکنیک، دیگر درخواست جداگانه برای لود عکس به سرور ارسال نمی شود و عکس به صورت قسمتی از متن صفحه HTML در مرورگر لود شده و در نهایت رندر و به کاربر نمایش داده می شود.

مزیت inline کردن عکس

همان طور که در ابتدای متن توضیح داده شد با استفاده از تکنیک inline کردن عکسها می توانید از تعداد درخواستها به سرور برای بارگذاری یک صفحه بکاهید که این امر در هنگام وجود تعداد زیادی کاربر همزمان در سایت به دلیل پایین آوردن زمان پاسخگویی سرور یا همان response time بسیار مفید خواهد بود.

ایراد inline کردن عکس

وقتی عکس به صورت فایل در یک صفحه لود شود، مرورگر می تواند آن عکس را کش کرده و برای دفعات بعد برای بارگذاری عکس به سرور درخواستی ارسال نکند و عکس را از کش لوکال بارگذاری کند. در نتیجه همه کاربران جدیدی که وارد صفحه مورد نظر می شوند برای بارگذاری عکس به سرور request ارسال می کنند ولی کاربران تکراری برای لود عکس از حافظه کش خودشان استفاده می کنند. ولی وقتی از تکنیک inline کردن عکس استفاده می کنید، مرورگر آن عکس را کش نمی کند و هر بار برای لود عکس باید کاراکترهای base64 درون HTML را بخواند. در نتیجه برای عکسهایی که در صفحات گوناگون استفاده می شوند، استفاده از تکنیک اینلاین کردن عکس ها در HTML کار منطقی به نظر نمی رسد.

توجه داشته باشید که اگر عکسی به صورت base64 به عنوان بکگراند در CSS آمده باشد، به دلیل کش شدن فایلهای CSS توسط مرورگرها، آن عکس نیز کش خواهد شد.

بهینه سازی سایت با inline کردن عکس


فرض کنید شما یک داده ی باینری دارید و می خواهید آن را در بستر شبکه انتقال دهید. به طور کلی شما این کار را تنها از طریق Stream کردن بیت ها و بایت های خام انجام نخواهید داد. چرا؟ زیرا ابزارهایی برای Stream کردن متن وجود دارد. شما هرگز اطلاع ندارید که برخی از پروتکل ها ممکن است داده های باینری شما را به عنوان کاراکترهای کنترلی تفسیر کنند ( درست به مانند یک مودم) و یا برخی دیگر از پروتکل ها همانند FTP ممکن است تصور کنند که شما یک کاراکتر خاص مانند ending را وارد کرده اید.

mccaffrey-fig3

بنابراین برای مقابله با این مشکلات داده های باینری را به رشته ای از کاراکترها کد گذاری (encode) می کنند. Base64 یکی از انواع این گونه کد گذاری می باشد. چرا Base64؟ زیرا با استفاده از آن شما می توانید همواره بر ۶۴ کاراکتری که در اغلب مجموعه کاراکترها (character set) ارائه می شود حساب کنید و بنابراین از نحوه ی صحیح نمایش داده های خود در سمت گیرنده اطمینان بیشتری کسب کنید.

استفاده از Base64 برای طراحان وب کاربردهای بسیار مفیدی دارد. بعنوان مثال می توان برای جلوگیری از ارسال یک Request اضافه از سمت Client آیکون معروف به Favicon را به جای فایل درون تگ جاسازی نمود که در زیر نمونه آن را می بینیم:

<link href=”data:image/png;base64,iVBORw0KGgoAAAANSUhEU. …” rel=”icon” type=”image/x-icon”>

حتماً این سوال برایتان به وجود می آید که در مثال بالا چطور می توانید یک تصویر را به Base64 تبدیل کنید. برای این کار راه های مختلفی وجود دارد ولی یکی از در دسترس ترین راه ها استفاده از اپلیکیشن های آنلاین است که در زیر یکی از آنها را می توانید ملاحظه کنید:

https://www.base64-image.de/

Base 64 چیست و چه کاربردی دارد؟



چگونه مبنای 64 به‌سرعت صفحات کمک می‌کند؟

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

  1. HTML
  2. CSS
  3. اولین تصویر
  4. دومین تصویر

 


اینجا یک صفحه وب دیگر با تصاویر بر مبنای 64 وجود دارد. این صفحه برای بارگذاری تنها به دو چیز نیاز دارد.

  1. HTML
  2. CSS


تأثیر Base64 بر سئو چگونه است؟

تأثیر اصلی که تصاویر Base64 بر سئو می‌گذارد این است که تصاویر توسط گوگل شناخته نمی‌شوند. به این معنی که تصاویری که شما بر مبنای 64 استفاده کردید توسط جستجوی تصاویر گوگل نمایش داده نمی‌شوند و یا همچنین در موتورهای جستجوی دیگر نیز نمایش داده نمی‌شوند.


پس چرا از آن استفاده می‌کنیم؟

بسیاری از تصاویری که در صفحه شما وجود دارد مهم نیستند و اگر آن‌ها شناخته نشوند تأثیری بر روی ترافیک شما ندارند. بهترین مثال می‌تواند آیکون‌های اجتماعی باشد، تعداد آن‌ها کم است مانند Twitter، Google+، Facebook و غیره.
تصاویر واقعاً کوچک هستند و نیاز به شناخته شدن ندارند. شما هرگز از ترافیک آیکون کوچک توییتر سود نمی‌برید. در مورد تصاویری که فقط برای طراحی استفاده می‌شوند مانند «دکمه پایین»، «نقل‌قول» فکر کنید، چیزهایی شبیه به این‌ها برای سئو مهم نیستند؛ اما سرعت بارگذاری صفحاتتان را کم می‌کنند. درهروب سایت 8 تا 12 آیکون اجتماعی وجود دارد که هرکدام از آن‌ها یک درخواست را به HTTP می‌فرستند درحالی‌که اگر شما از Base64 استفاده کنید نیاز نیست که آن‌ها دانلود شوند.


سایر ملاحظات

بهتر است که تنها برای تصاویر کوچک از Base64 استفاده کنیم. اگر شما سعی می‌کنید که تصاویر بزرگ را بر مبنای 64 بیاورید آنگاه شما با یک مقدار بزرگی کد در HTML روبرو هستید که مزیت عملکرد Base64 را از دست می‌دهید.


چگونه در این سایت از Base 64 استفاده کرده‌ایم؟

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


چگونه گوگل Base64 را شناسایی می‌کند؟

همان‌طورکه قبلاً ذکرشد گوگل تصاویرکدگذاری شده برمبنای 64 را نمی‌تواند بشناسد. دراین مقاله چندعکس بزرگ وجود دارد. همه آن‌ها توسط گوگل شناسایی‌شده‌اند.

چگونه من این کار را انجام دادم؟

یک‌راه این است که یک پوشه تصاویر که همه تصاویر آن کدگذاری شده‌اند را داشته باشید، سپس شما آن را روی هاست خود آپلود کنید، در قسمت HEAD در HTML از نشانه‌های Opengraph برای جهت‌دهی گوگل به آن تصاویر استفاده کنید.

اینجا کدهایی را که در قسمت HEAD در HTML این صفحه آورده‌ام را قرار داده‌ام.

<!DOCTYPE html>
<html lang="en-US" prefix="og: http://ogp.me/ns#" xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml" itemscope itemtype="http://schema.org/Article">
<head>
<meta name=viewport content="width=device-width, initial-scale=1">
<meta property="og:image" content="https://shift.ir/pagespeed/images/base64-image.png">

در بخش اول این کدهای به‌هم‌ریخته، Opengraph ها آورده شده‌اند و در بخش آخر تصویر معرفی‌شده است، نتیجه این کار این است که تصاویر من در گوگل شناخته‌شده است.

<meta property="og:image" content="https://shift.ir/pagespeed/images/base64-image.png">


مسائل مربوط به‌اندازه

نتیجه کدگذاری یک فایل عکس 2kb بر مبنای 64 2.5 یا 3kb است. بااین‌حال اگر شما باید فایلتان را فشرده کنید. در پایان سایزی در حدود همان سایز فایل عکس به دست می‌آورید. من توصیه نمی‌کنم که برای عکس‌های بزرگ‌تر از 5kb از کدگذاری بر مبنای 64 استفاده کنید.


چگونه از Base64 استفاده کنیم؟

یک عکس معمولی در HTML شما وجود دارد.
مکان فایل (به‌طور مثال Example.com) را با اطلاعات SRC به‌دست‌آمده از ابزار Base64 جایگزین کنید. اکنون منبع عکس شما از یک فایل خارجی دیگری نیست در عوض آن، داده‌های کدگذاری شده در SRC قرار دارد.


ابزار

برای تست کار با Base64، لطفاً از ابزار رایگان base64 image encoder tool استفاده کنید.

behrad nasehi
۰۸ مرداد ۹۷ ، ۱۶:۵۵ موافقین ۰ مخالفین ۰ ۱ نظر