ذخیره و بازیابی تاریخ شمسی در بانک‌های اطلاعاتی

420 views
Skip to first unread message

Amir Farsi

unread,
Oct 31, 2014, 11:27:51 AM10/31/14
to persian-co...@googlegroups.com
سلام دوستان.
همانطور میدانید یکی از مشکلات برنامه نویسان ایرانی، این است که بانکهای اطلاعاتی فقط از تاریخ میلادی بطور ذاتی پشتیبانی میکنند، امّا همه تقویم رسمی ایران هجری شمسی است و کلیه نرم افزارهایی که از بانک اطلاعاتی استفاده میکنند، باید با آن سازگار شوند.
برای ذخیره و بازیابی(جستجوی یک روز یا بین دو روز) در بانکهای اطّلاعاتی تاکنون روشهای مختلفی به کار گرفته میشود. جستجو میان دو تاریخ معمولاْ مشکلات بیشتری دارد.
مشکلاتی چون نوع فیلد به روشی که برای جستجو مناسبتر باشد، سال کبیسه و روش جستجو و query و دقیق بودن نتایج جستجو و سریع بودن جستجو وجود دارد.
برخی تاریخ را بصورت شمسی و با نوع عددی یا متنی ذخیره میکنند، و سپس آن را به روز و ماه و سال تفکیک مینمایند، برخی تاریخ را بصورت نوع date و میلادی ذخیره کرده و از الگوریتمهای تبدیل تاریخ استفاده میکنند، که در هنگام جستجو میان دو تاریخ مشکلاتی دارد.
راهکارهای شما چیست؟ آیا راهکار مفید و سریع و کارآمدی برای این مشکل دارید؟
*مهم: آیا میتوان در موتور بانکهای اطلاعاتی متن باز مانند PostrageSQL و MySQL و... تغییراتی به وجود آورد که از نوع داده‌ای با تاریخ شمسی پشتیبانی کند؟ همانگونه که از تاریخ میلادی بطور ذاتی پشتیبانی میکند؟
نظر شما چیست؟ بیایید این تاپیک را به محلی جامع برای گرآوری و تجمیع این اطلاعات و مقالات تبدیل کنیم و سپس آنها را در سایت persian-computing قرار دهیم.

Saleh Souzanchi

unread,
Oct 31, 2014, 1:17:13 PM10/31/14
to persian-co...@googlegroups.com
من چند سال پیش روی این موضوع کلی وقت گذاشتم  که حاصلش شد این پروژه

به طور قطع بهترین راه ذخیره تاریخ در جداول استفاده از فید عدد و ذخیره تاریخ به صورت Unix timestamp هست . و استفاده از این روش باعث میشه محاسبات سریع تر انجام شد.

اما همین پروژه من هم مشکلات زیادی داره . مثلا در کوئری های که نیاز به group by هست یا در جویین ها کند عمل میکنه.
برای بهتر کردن این پروژه به این نتیجه رسیدم که باید یک اکستنشن برای مای اسکیوال ایجاد بشه تا سرعت محاسبات بالا تر بره. اما فرصتش رو هنوز پیدا نکرم.

Amir Farsi

unread,
Oct 31, 2014, 1:23:15 PM10/31/14
to persian-co...@googlegroups.com
میشه بیشتر در مورد unix timestamp و نحوه استفادش توضیح بدی.
ضمناْ احتمالاْ در MySQL تحت ویندوز هم قابل استفاده نیست.
اکستنشن برای اینکه MySQL چکار کنه؟ یک نوع داده مخصوص تاریخ شمسی یا یک query خاص از پیش تعریف شده ایجاد کنه؟

Saleh Souzanchi

unread,
Oct 31, 2014, 1:51:15 PM10/31/14
to persian-co...@googlegroups.com



اگر دستور strtotime تو پی اچ پی رو نگاه کنید. متوجه میشید که یک تاریخ رو به عدد که بر پیه زمان هست تبدیل میکنه.

ضمناْ احتمالاْ در MySQL تحت ویندوز هم قابل استفاده نیست.
من ویندز کار مینم و تو ویندوز هم نوشتمش. محدودیتی که هست این هست که در نسهخه های بالای ۵.۱ باید استفاده کرد.

اکستنشن برای اینکه MySQL چکار کنه؟ یک نوع داده مخصوص تاریخ شمسی یا یک query خاص از پیش تعریف شده ایجاد کنه؟
 
اگر دقت کنید محاسبات که صورت میگیره در خیلی از موارد در حال پردازش رشته هست . و در این سطح محاسبات منابع زیادی رو مصرف میکنه.
اما در اکستنشن در سطوح پایین تر و به کمک زبان c انجام میشه و ۱۰۰ بهینه تر از محاسبات در سطوح بالاتر چون محاسات در زبان اسکیو ال سرو هست.

Hooman Mehr

unread,
Oct 31, 2014, 2:42:54 PM10/31/14
to Amir Farsi, persian-co...@googlegroups.com
بهترین روش ذخیره تاریخ این است که یک عدد را که نشان دهنده زمان سپری شده از مبدا تاریخ شما است ذخیره کنید و تابعی داشته باشید که آن عدد را به تاریخ طبق تقویم مورد نظر شما تبدیل کند. با این روش تاریخ مستقل از تقویم ذخیره می‌شود. محاسبات تاریخ و جستجو در محدوده‌های تاریخ هم تبدیل جستجو و محاسبه روی اعداد معمولی می‌شود.

در مورد بانکهای متن‌باز هم سالها پیش کارهایی انجام شد که تا جایی که می‌دانم به نتیجه مطلوب (گنجانده شدن تقویم شمسی در متن اصلی آنها) نرسید.
 
--
--
http://groups.google.com/group/persian-computing-fa

---
‏این پیام را به خاطر این دریافت کردید که برای مبحثی در گروه «محاسبات فارسی» در Google Group ثبت‌نام شده‌اید.
جهت لغو اشتراک از این گروه و قطع دریافت ایمیل از آن، ایمیلی به persian-computin...@googlegroups.com ارسال کنید.
برای گزینه‌های بیشتر از https://groups.google.com/d/optout بازدید کنید.

Reply all
Reply to author
Forward
0 new messages