توی توسعه دیتابیس، انتخاب نوع دادهها یکی از بخشهای مهم و حساسه. امروز یه چیت شیت و از انواع ستونهای عددی و متنی در Laravel آوردم تا راحتتر تصمیمگیری کنیم که چه نوعِ دادهای، برای داده مدنظرمون کاربردی و مناسبتره
این چیت شیت برای کسانی که مثل من از حافظه کوتاهمدت رنج میبرن (دلیلی که باعث شد اصلا به فکر ساخت این چیت شیت بیوفتم)، میتونه بیشتر از بقیه دوستان مفید باشه
@DevTwitter | <Amir Asgary/>
این چیت شیت برای کسانی که مثل من از حافظه کوتاهمدت رنج میبرن (دلیلی که باعث شد اصلا به فکر ساخت این چیت شیت بیوفتم)، میتونه بیشتر از بقیه دوستان مفید باشه
@DevTwitter | <Amir Asgary/>
❤52👍6🤣4
طلایی ترین لیست وبلاگها برنامه نویسان شرکتهای بزرگ دنیا مثل Google و . . .
در این لیست افرادی که تجربه کار کردن در شرکتهای بزرگ دارند اسم و لینکشون آورده شده
نفراول :
برنامه نویس شرکت TripAdvisor
هم مقالات فنی و هم مهارت نرم رو پوشش میده
https://dandreamsofcoding.com/
نفر دوم :
خالق الگوریتمی که در تمامی سیستم های recommender در شرکت بزرگ ازش استفاده میشه
https://lemire.me/blog/
نفر سوم :
از ایشون مگه بالاتر داریم ؟ CEO شرکت Stack overflow
https://www.joelonsoftware.com/
نفر چهارم :
مهندس نرمافزار گوگل و خالق چند تا از بزرگترین پروژههای Open Source جهان
https://latedev.wordpress.com/
نفر پنجم :
یک از تاثیر گذاران محبوبیت Linux
https://www.linux.org/forums/
نفر ششم :
برنامه نویس Google و نوسینده چند کتاب مشهور در دنیا
https://www.jeremykun.com/
نفر هفتم :
خالق Viaweb نوسینده بزرگ در حیطه برنامه نویسی
https://paulgraham.com/articles.html
نفر هقتم :
متخصص و Director شرکت Huawei
https://www.yegor256.com/
نفر هشتم :
یک متخصص به تمام معنا
https://prog21.dadgum.com/
نفر نهم :
نوسینده کتاب Clean Code
https://blog.cleancoder.com/
نفرم دهم :
مهندس گوگل
https://stevehanov.ca/blog/
نفرم یازدهم :
مهندس شرکت Uber
https://blog.pragmaticengineer.com/
@DevTwitter | <Soheib Kiani/>
در این لیست افرادی که تجربه کار کردن در شرکتهای بزرگ دارند اسم و لینکشون آورده شده
نفراول :
برنامه نویس شرکت TripAdvisor
هم مقالات فنی و هم مهارت نرم رو پوشش میده
https://dandreamsofcoding.com/
نفر دوم :
خالق الگوریتمی که در تمامی سیستم های recommender در شرکت بزرگ ازش استفاده میشه
https://lemire.me/blog/
نفر سوم :
از ایشون مگه بالاتر داریم ؟ CEO شرکت Stack overflow
https://www.joelonsoftware.com/
نفر چهارم :
مهندس نرمافزار گوگل و خالق چند تا از بزرگترین پروژههای Open Source جهان
https://latedev.wordpress.com/
نفر پنجم :
یک از تاثیر گذاران محبوبیت Linux
https://www.linux.org/forums/
نفر ششم :
برنامه نویس Google و نوسینده چند کتاب مشهور در دنیا
https://www.jeremykun.com/
نفر هفتم :
خالق Viaweb نوسینده بزرگ در حیطه برنامه نویسی
https://paulgraham.com/articles.html
نفر هقتم :
متخصص و Director شرکت Huawei
https://www.yegor256.com/
نفر هشتم :
یک متخصص به تمام معنا
https://prog21.dadgum.com/
نفر نهم :
نوسینده کتاب Clean Code
https://blog.cleancoder.com/
نفرم دهم :
مهندس گوگل
https://stevehanov.ca/blog/
نفرم یازدهم :
مهندس شرکت Uber
https://blog.pragmaticengineer.com/
@DevTwitter | <Soheib Kiani/>
❤26👍16🔥5
امروز ی مقاله جالبی درباره پترن API Composition میخوندم که میاد چندین سرویس بک اند رو در یک API مونولیثیک ادغام میکنه و این باعث بهبود دسترسی به داده، مدیریت پذیری و انعطاف پذیری کلاینت فراهم می کند.
در حالت سنتی کلاینت میاد چندین سرویس رو به طور مستقل صدا میزنه که این باعث ایجاد تاخیر و نیاز به مدیریت خطا در کلاینت... میشه و مشکلات خاص خودش رو داره.
پترن API Composition وقتی نیازه که می خواهید داده های مختلف رو از سرویس های مختلف رو جمع کنید و با ترکیب API ها به یک Endpoint واحد چالش رو حل کنید.
از مزیت های این پترن:
افزایش قابلیت کشف و ثبات قابلیتها
جداسازی تولیدکنندگان و مصرفکنندگان داده
هماهنگسازی متمرکز
توسعه سریع و استفاده مجدد از قابلیتها
@DevTwitter | <Mohammad Abdorrahmani/>
در حالت سنتی کلاینت میاد چندین سرویس رو به طور مستقل صدا میزنه که این باعث ایجاد تاخیر و نیاز به مدیریت خطا در کلاینت... میشه و مشکلات خاص خودش رو داره.
پترن API Composition وقتی نیازه که می خواهید داده های مختلف رو از سرویس های مختلف رو جمع کنید و با ترکیب API ها به یک Endpoint واحد چالش رو حل کنید.
از مزیت های این پترن:
افزایش قابلیت کشف و ثبات قابلیتها
جداسازی تولیدکنندگان و مصرفکنندگان داده
هماهنگسازی متمرکز
توسعه سریع و استفاده مجدد از قابلیتها
@DevTwitter | <Mohammad Abdorrahmani/>
👍21🔥3❤1
یه سایت پیدا کردم واسه یادگیری مقدماتی لینوکس، چقد شیوا و قشنگ توضیح داده.
ببینم چقدش میتونم بخونم
Linuxlearning.ir
@DevTwitter | <Poriya/>
ببینم چقدش میتونم بخونم
Linuxlearning.ir
@DevTwitter | <Poriya/>
👍45👎13❤2
محصولات ناموجود سایت وردپرسی خودتو ببر انتهای لیست محصولات که کاربر تجربه بهتری داشته باشه
کد انجام ان کار:
https://gist.github.com/m4tinbeigi-official/b2c68c71d616fc42dffb52c1c78ba8f1
@DevTwitter | <Rick Sanchez/>
کد انجام ان کار:
https://gist.github.com/m4tinbeigi-official/b2c68c71d616fc42dffb52c1c78ba8f1
@DevTwitter | <Rick Sanchez/>
🤣38👍15❤4
خب باز من بیکار شدم و یه SMTP client برای Python نوشتم
دوست داشتید ببینید و بهترش کنید :))
https://github.com/alisharify7/py-smtper
@DevTwitter | <Ali-Sharify/>
دوست داشتید ببینید و بهترش کنید :))
https://github.com/alisharify7/py-smtper
@DevTwitter | <Ali-Sharify/>
👍19🤣3👎2
This media is not supported in your browser
VIEW IN TELEGRAM
اگه میخواهید یک code interpreter یا دستیار برای کد نویسی داشته باشید Qwen-2.5-Coder 1.5B خیلی خوبه. کاملا آفلاین/لوکال و توی خود browser، سریع، و دقتش هم خیلی خوب هست.
https://github.com/cfahlgren1/qwen-2.5-code-interpreter
@DevTwitter | <Mehdi Allahyari/>
https://github.com/cfahlgren1/qwen-2.5-code-interpreter
@DevTwitter | <Mehdi Allahyari/>
👍30👎2
اگر در حال ساخت workflow های RAG یا نیاز به یک API برای استخراج متون از فایل ها و ساخت embeding هستید، میتونید از api اوپن سورسی که نوشتم استفاده کنید. از یک مدل لوکال برای ساخت embeding ها استفاده میکنه که فارسی خیلی خوبی ساپورت میکنه.
https://github.com/xmannii/Maux-API
@DevTwitter | <Mani/>
https://github.com/xmannii/Maux-API
@DevTwitter | <Mani/>
👍9👎1
This media is not supported in your browser
VIEW IN TELEGRAM
روی سرورهای شخصیم، معمولا از این تلهها استفاده میکنم.
ابزار Ghostport برای گمراهکردن port scannerها با زبان Rust طراحی شده که با شبیهسازی serviceها به صورت fake در تمام portها و استفاده از امضای سفارشی، باعث ایجاد نتایج غلط در اسکنرها میشود.
https://github.com/vxfemboy/ghostport
@DevTwitter | <Vahid Nameni/>
ابزار Ghostport برای گمراهکردن port scannerها با زبان Rust طراحی شده که با شبیهسازی serviceها به صورت fake در تمام portها و استفاده از امضای سفارشی، باعث ایجاد نتایج غلط در اسکنرها میشود.
https://github.com/vxfemboy/ghostport
@DevTwitter | <Vahid Nameni/>
👍49🤣11🔥7👎2
فرض کنید کاربران در بخش جستجو اشتباهات تایپی داشته باشند ، چه طور باز هم نتیجه مورد نظر را پیدا کنیم ؟
لینک یرگول
@DevTwitter | <سعید/>
لینک یرگول
@DevTwitter | <سعید/>
👎30👍21🔥3🤣3❤2
اوبونتو، توزیع محبوب لینوکس؛ بیستساله شد.
این توزیع، در اکتبر ۲۰۰۴ توسط «مارک شاتلورث» و بر پایه «دبیان گنو/لینوکس» با هدف تبدیل شدن به یک سیستمعامل همگانی دسکتاپ، ارائه شد.
در حال حاضر این توزیع انتخاب اول بسیاری افراد هم برای دسکتاپ و هم برای سروره.
تولدش مبارک!
@DevTwitter | <Mohammadreza Haghiri/>
این توزیع، در اکتبر ۲۰۰۴ توسط «مارک شاتلورث» و بر پایه «دبیان گنو/لینوکس» با هدف تبدیل شدن به یک سیستمعامل همگانی دسکتاپ، ارائه شد.
در حال حاضر این توزیع انتخاب اول بسیاری افراد هم برای دسکتاپ و هم برای سروره.
تولدش مبارک!
@DevTwitter | <Mohammadreza Haghiri/>
❤89🤣20👎15👍14🔥6
ابزار Austin یک Python frame stack sampler است
پروفایل های آماری قدرتمندی که کمترین تأثیر را بر برنامه داره میسازه
ابزار جانبی نمیخواد، تاثیر حداقلی، سریع و سبک، پروفایل زمان و حافظه،
پشتیبانی از چند فرآیندی (مثل. mod_wsgi)
@DevTwitter | <MehrdadLinux/>
پروفایل های آماری قدرتمندی که کمترین تأثیر را بر برنامه داره میسازه
ابزار جانبی نمیخواد، تاثیر حداقلی، سریع و سبک، پروفایل زمان و حافظه،
پشتیبانی از چند فرآیندی (مثل. mod_wsgi)
@DevTwitter | <MehrdadLinux/>
👍21👎1
سال 2022 یک پروژه فروشگاهی پیشرفته لاراولی ساختم به نام Shopline که به صورت فول استک بود
توسعه این پروژه چند ماهی تقریبا متوقف کرده بودم ولی الان دوباره دارم یک سری آپدیت ها براش میدم.
اولین آپدیت این بود که از لاراول 10 به لاراول 11 آپدیت کردم
این پروژه به نظرم میتونه خیلی برای یادگیری مناسب باشه
https://github.com/milwad-dev/shopline
@DevTwitter | <Milwad Khosravi/>
توسعه این پروژه چند ماهی تقریبا متوقف کرده بودم ولی الان دوباره دارم یک سری آپدیت ها براش میدم.
اولین آپدیت این بود که از لاراول 10 به لاراول 11 آپدیت کردم
این پروژه به نظرم میتونه خیلی برای یادگیری مناسب باشه
https://github.com/milwad-dev/shopline
@DevTwitter | <Milwad Khosravi/>
👍28👎7
دستیار هوش مصنوعی برای برنامه نویسان پایتون!
از وب سایت zzzcode.ai می تونید به عنوان یک دستیار تخصصی برای زبان پایتون، حوزه داده و هوش مصنوعی استفاده کنید. هم براتون کد مینویسه و هم کدهایی که بهش میدید رو توضیح میده. به عنوان نمونه من ازش خواستم که سورس کد مدل یادگیری ماشین GCNN روی توی پایتون بهم بده و خروجی تصویر رو داده. نمونه پرامپت داده شده در زیر:
Prompt:
Hi dear, I want to train a GCNN model on "MyDataset" dataset. Can you please write code in Python?
لینک وب سایت: https://zzzcode.ai/
@DevTwitter | <Ali Nazarizadeh/>
از وب سایت zzzcode.ai می تونید به عنوان یک دستیار تخصصی برای زبان پایتون، حوزه داده و هوش مصنوعی استفاده کنید. هم براتون کد مینویسه و هم کدهایی که بهش میدید رو توضیح میده. به عنوان نمونه من ازش خواستم که سورس کد مدل یادگیری ماشین GCNN روی توی پایتون بهم بده و خروجی تصویر رو داده. نمونه پرامپت داده شده در زیر:
Prompt:
Hi dear, I want to train a GCNN model on "MyDataset" dataset. Can you please write code in Python?
لینک وب سایت: https://zzzcode.ai/
@DevTwitter | <Ali Nazarizadeh/>
🔥15👍10👎2
یه اسکریپت پایتون نوشتم که خیلی سریع و راحت میشه سایز queue ها و topicهای روی سرویس باس Azure روی ترمینال مانیتور کرد.
راه های دیگه هم داره، ولی من یه چیز ساده و مخصوص ترمینال میخواستم تا توی کارم ازش استفاده کنم.
https://github.com/imaun/servicebus-size-monitor
@DevTwitter | <imun/>
راه های دیگه هم داره، ولی من یه چیز ساده و مخصوص ترمینال میخواستم تا توی کارم ازش استفاده کنم.
https://github.com/imaun/servicebus-size-monitor
@DevTwitter | <imun/>
👍12
در لاراول، به جای اینکه خودمون بیایم و شناسههای مدلها رو دستی مقایسه کنیم، بهتره از روابطی که بین مدلها تعریف کردیم استفاده کنیم. اینجوری هم کدمون تمیزتر و خواناتر میشه، هم استانداردتر و حرفهایتر!
مثلاً فرض کن میخوایم یه پست رو بر اساس دستهبندی و نویسندهاش پیدا کنیم. به جای اینکه شناسهها رو اینطوری چک کنیم:
میتونیم از متدهای خفن لاراول مثل
یا مثلاً برای اینکه ببینیم نویسنده یه پست همون کاربری هست که ما میخوایم، به جای اینکه شناسهها رو مستقیم مقایسه کنیم:
خیلی راحت میتونیم از رابطه استفاده کنیم:
اینجوری کدمون سادهتر و شیکتر میشه و از امکانات قوی لاراول هم به بهترین شکل ممکن استفاده میکنیم!
@DevTwitter | <Firoozeh Daeizadeh/>
مثلاً فرض کن میخوایم یه پست رو بر اساس دستهبندی و نویسندهاش پیدا کنیم. به جای اینکه شناسهها رو اینطوری چک کنیم:
Post::where('category_id', $category->id)
->where('author_id', $user->id)
->first();
میتونیم از متدهای خفن لاراول مثل
whereBelongsTo
استفاده کنیم که خودش باهوشه و از روابط تعریفشده استفاده میکنه:Post::whereBelongsTo($category)
->whereBelongsTo($user, 'author')
->first();
یا مثلاً برای اینکه ببینیم نویسنده یه پست همون کاربری هست که ما میخوایم، به جای اینکه شناسهها رو مستقیم مقایسه کنیم:
$post->author_id == $user->id;
خیلی راحت میتونیم از رابطه استفاده کنیم:
$post->author()->is($user);
اینجوری کدمون سادهتر و شیکتر میشه و از امکانات قوی لاراول هم به بهترین شکل ممکن استفاده میکنیم!
@DevTwitter | <Firoozeh Daeizadeh/>
👍40🤣9🔥5👎3❤2
من الان یادم افتاد یه اسمبلر قبلا نوشته بودم واسه دانشگاه اگه اینو بیارم توی github.com/keyvank/30cc میتونم با سی خود سی رو کامپایل کنم بعد با پایتون اسمبلی رو تبدیل به کدماشین بکنم و دیگه حتی nasm هم نداشته باشیم :)) استقلال واقعی.
https://github.com/Glyphack/assembler-python/blob/master/assembler.py
@DevTwitter | <Shaygan/>
https://github.com/Glyphack/assembler-python/blob/master/assembler.py
@DevTwitter | <Shaygan/>
🤣12👍7🔥5👎1
نسخه جدید Next.js 15 اومده!
@next/codemod CLI
بهروز رسانی بدون دردسر!
به راحتی به آخرین نسخههای Next.js و React منتقل شو!
Async Request APIs (Breaking)
بیدردسرتر از همیشه!
گام به جلو در راستای یک مدل رندرینگ و کشینگ سادهتر.
Caching Semantics (Breaking)
کشینگ دیگه به عنوان پیشفرض نیست!
درخواستهای fetch، GET Route Handlers و روت کلاینت دیگه کش نمیشن!
React 19 Support
همیشه بهروز!
پشتیبانی از React 19 و بهبود هایدریشن!
Turbopack Dev (Stable)
دنده پنج رو بزن!
بهبود عملکرد و ثبات در زمان توسعه. ظاهرا توربو میخواد کار کنه اینبار
Static Route Indicato
چراغ سبز یا قرمز!
شناسایی مسیرهای استاتیک و داینامیک برای بهینهسازی سریعتر! اینم فیچر جذابی به نظر میرسه ولی باید تست بشه که چقدر عمل میکنه
unstable_after API (Experimental)
کارها رو بعد از دریافت رسپانس انجام بده!
با after() کارهای لازم رو بعد از ارسال پاسخ انجام بده و معطل نکن!
instrumentation.js API (Stable)
مشاهده بهتر چرخه عمر سرور.
برای نظارت بر عملکرد سرور از این API استفاده کن!
Enhanced Forms (next/form)
فرمهای هوشمند!
فرمهایی که خودشون کارها رو پیشدستی میکنن و بدون کد نویسی اضافه بهینه میشن!
next.config: TypeScript support for next.config.ts
تنظیمات با TypeScript!
حالا میتونی تنظیمات Next.js رو با TypeScript بنویسی.
Self-hosting Improvements
کنترل بیشتر!
کنترل بهتری روی هدرهای Cache-Control.
Server Actions Security
امنیت بهبود یافته!
Bundling External Packages (Stable)
مدیریت پکیج های خارجی راحتتر!
گزینههای جدید برای مدیریت پکیج ها در App و Pages Router.
ESLint 9 Support
پشتیبانی از ESLint 9 برای کدهایی با کیفیت بالاتر.
Development and Build Performance
زمانهای بیلد و Fast Refresh سریعتر!
@DevTwitter | <Peyman Naderi/>
@next/codemod CLI
بهروز رسانی بدون دردسر!
به راحتی به آخرین نسخههای Next.js و React منتقل شو!
Async Request APIs (Breaking)
بیدردسرتر از همیشه!
گام به جلو در راستای یک مدل رندرینگ و کشینگ سادهتر.
Caching Semantics (Breaking)
کشینگ دیگه به عنوان پیشفرض نیست!
درخواستهای fetch، GET Route Handlers و روت کلاینت دیگه کش نمیشن!
React 19 Support
همیشه بهروز!
پشتیبانی از React 19 و بهبود هایدریشن!
Turbopack Dev (Stable)
دنده پنج رو بزن!
بهبود عملکرد و ثبات در زمان توسعه. ظاهرا توربو میخواد کار کنه اینبار
Static Route Indicato
چراغ سبز یا قرمز!
شناسایی مسیرهای استاتیک و داینامیک برای بهینهسازی سریعتر! اینم فیچر جذابی به نظر میرسه ولی باید تست بشه که چقدر عمل میکنه
unstable_after API (Experimental)
کارها رو بعد از دریافت رسپانس انجام بده!
با after() کارهای لازم رو بعد از ارسال پاسخ انجام بده و معطل نکن!
instrumentation.js API (Stable)
مشاهده بهتر چرخه عمر سرور.
برای نظارت بر عملکرد سرور از این API استفاده کن!
Enhanced Forms (next/form)
فرمهای هوشمند!
فرمهایی که خودشون کارها رو پیشدستی میکنن و بدون کد نویسی اضافه بهینه میشن!
next.config: TypeScript support for next.config.ts
تنظیمات با TypeScript!
حالا میتونی تنظیمات Next.js رو با TypeScript بنویسی.
Self-hosting Improvements
کنترل بیشتر!
کنترل بهتری روی هدرهای Cache-Control.
Server Actions Security
امنیت بهبود یافته!
Bundling External Packages (Stable)
مدیریت پکیج های خارجی راحتتر!
گزینههای جدید برای مدیریت پکیج ها در App و Pages Router.
ESLint 9 Support
پشتیبانی از ESLint 9 برای کدهایی با کیفیت بالاتر.
Development and Build Performance
زمانهای بیلد و Fast Refresh سریعتر!
@DevTwitter | <Peyman Naderi/>
🔥31👍10🤣10❤3
اگر در چهار حوزه دیپ لرنینگ، ماشین لرنینگ و جبر خطی و پردازش زبان طبیعی دنبال حل تمرین در سطح کد هستید این سایت برای شماست
deep-ml.com
@DevTwitter | <Amir/>
deep-ml.com
@DevTwitter | <Amir/>
🔥24👍9🤣1
چرا استفاده از فیلدهای JSON در دادههای تراکنشی ریسک دارد؟
خیلی وسوسهانگیز است که از فیلدهای JSON برای ذخیرهسازی دادههای غیرساختاریافته استفاده کنیم، اما برای دادههای تراکنشی این یک تصمیم پر ریسک است. بیایید به دلایلش نگاهی بیندازیم:
کاهش کارایی جستجو: فیلدهای JSON نمیتوانند به خوبی جداول ساختاریافته از ایندکسهای کارآمد استفاده کنند. این یعنی جستجوهای شما کندتر میشود، که در دادههای تراکنشی که نیاز به سرعت بالا دارند، فاجعه است.
کاهش نرمالسازی و ساختار: پایگاههای داده رابطهای طراحی شدهاند تا روابط بین دادهها را مدیریت کنند. استفاده زیاد از JSON میتواند دادههای غیر نرمال بسازد، که مدیریت و بهروزرسانی آنها را سخت میکند و به ناسازگاریهای داده منجر میشود.
مشکل در صحت دادهها: در جداول نرمالسازی شده، محدودیتهایی مثل نوع داده و روابط وجود دارد که مانع ورود دادههای نادرست میشوند. ولی در JSON، این کنترلها وجود ندارد، پس ممکن است به راحتی دادههای ناسازگار داشته باشید.
گزارشگیری سختتر: اکثر ابزارهای گزارشگیری با دادههای ساختاریافته بهتر کار میکنند. برای استفاده از دادههای JSON باید آنها را تجزیه و ساختاردهی کنید که وقتگیر است و روی سرعت تأثیر میگذارد.
مدیریت پیچیدهتر تراکنشها: اگر بخواهید دادههای مختلفی را در یک فیلد JSON همزمان بهروزرسانی کنید، مدیریت تراکنشها سختتر و پیچیدهتر میشود.
پس چکار کنیم؟
از ترکیب جداول رابطهای و JSON به شکل هوشمندانه استفاده کنیم.
برای دادههای غیرساختاریافته جداول مرتبط ایجاد کنیم.
فقط در صورت لزوم روی فیلدهای JSON ایندکس بگذاریم.
طرحی برای مهاجرت تدریجی به ساختارهای بهتر داشته باشیم.
چکار نکنیم؟
کل دادههای مهم را در JSON ذخیره نکنیم.
به جای نرمالسازی از JSON استفاده نکنیم.
نوع JSON را برای دادههایی که مرتب تغییر میکنند به کار نبریم.
در نهایت، برای دادههای تراکنشی که سرعت، جستجوی مکرر و صحت داده اهمیت دارند، بهتر است به جداول نرمالسازی شده پایبند بمانیم و از JSON فقط در موارد ضروری استفاده کنیم. و اگر احساس میکنید این محدودیتها زیاد است، راهحلهایی مثل Cassandra و Google Bigtable را جدی بگیرید! یادتان باشد، مشکلات پرفرمنس میتوانند خیلی زودتر از چیزی که فکرش را بکنید، کسب و کار شما را تهدید کنند.
@DevTwitter | <Firoozeh Daeizadeh/>
خیلی وسوسهانگیز است که از فیلدهای JSON برای ذخیرهسازی دادههای غیرساختاریافته استفاده کنیم، اما برای دادههای تراکنشی این یک تصمیم پر ریسک است. بیایید به دلایلش نگاهی بیندازیم:
کاهش کارایی جستجو: فیلدهای JSON نمیتوانند به خوبی جداول ساختاریافته از ایندکسهای کارآمد استفاده کنند. این یعنی جستجوهای شما کندتر میشود، که در دادههای تراکنشی که نیاز به سرعت بالا دارند، فاجعه است.
کاهش نرمالسازی و ساختار: پایگاههای داده رابطهای طراحی شدهاند تا روابط بین دادهها را مدیریت کنند. استفاده زیاد از JSON میتواند دادههای غیر نرمال بسازد، که مدیریت و بهروزرسانی آنها را سخت میکند و به ناسازگاریهای داده منجر میشود.
مشکل در صحت دادهها: در جداول نرمالسازی شده، محدودیتهایی مثل نوع داده و روابط وجود دارد که مانع ورود دادههای نادرست میشوند. ولی در JSON، این کنترلها وجود ندارد، پس ممکن است به راحتی دادههای ناسازگار داشته باشید.
گزارشگیری سختتر: اکثر ابزارهای گزارشگیری با دادههای ساختاریافته بهتر کار میکنند. برای استفاده از دادههای JSON باید آنها را تجزیه و ساختاردهی کنید که وقتگیر است و روی سرعت تأثیر میگذارد.
مدیریت پیچیدهتر تراکنشها: اگر بخواهید دادههای مختلفی را در یک فیلد JSON همزمان بهروزرسانی کنید، مدیریت تراکنشها سختتر و پیچیدهتر میشود.
پس چکار کنیم؟
از ترکیب جداول رابطهای و JSON به شکل هوشمندانه استفاده کنیم.
برای دادههای غیرساختاریافته جداول مرتبط ایجاد کنیم.
فقط در صورت لزوم روی فیلدهای JSON ایندکس بگذاریم.
طرحی برای مهاجرت تدریجی به ساختارهای بهتر داشته باشیم.
چکار نکنیم؟
کل دادههای مهم را در JSON ذخیره نکنیم.
به جای نرمالسازی از JSON استفاده نکنیم.
نوع JSON را برای دادههایی که مرتب تغییر میکنند به کار نبریم.
در نهایت، برای دادههای تراکنشی که سرعت، جستجوی مکرر و صحت داده اهمیت دارند، بهتر است به جداول نرمالسازی شده پایبند بمانیم و از JSON فقط در موارد ضروری استفاده کنیم. و اگر احساس میکنید این محدودیتها زیاد است، راهحلهایی مثل Cassandra و Google Bigtable را جدی بگیرید! یادتان باشد، مشکلات پرفرمنس میتوانند خیلی زودتر از چیزی که فکرش را بکنید، کسب و کار شما را تهدید کنند.
@DevTwitter | <Firoozeh Daeizadeh/>
👍26🤣4