نمایش نتایج 1 تا 6 از 6

نام تاپیک: گزارش سازی در جاوا

  1. #1

    گزارش سازی در جاوا

    سلام
    شاید سوالم رو جای درستی مطرح نکردم البته همین سوال رو توی بخش دیتابیس هم مطرح کردم گفتم اینجا هم بگم تا شاید اساتید بهتر راهنماییم کنن

    میشه بهم یه توضیح مختصر مفید بدین در مورد اینکه
    توی یک دیتابیس چندین تیبل وجود داره که با کلید اصلی به هم متصل هستن و برای ساختن یک گزارش باید این تیبل ها رو طوری که دیتاهاشون کنار هم فراخوانی بشه و یک گزارش رو بسازه فراخوانی کنیم
    اگه فرض بر این باشه که ما مثلا 20 تا تیبل با این مشخصات داشته باشیم قاعدتا select زدن و جوین کردن های تو در تو کار رو خیلی پیچیده میکنه و اگه قرار باشه کاربر توی برنامه تحت ویندوز مثلا بگه گزارش از فلان تاریخ میخوام کار به مراتب پیچیده تر میشه
    من چند تا view ساختم که با ادغام این view ها تونستم گزارشی که میخوام رو بسازم البته توی mysql
    حالا توی هر کدوم از این view ها تاریخ هایی وجود داره که کاربر هر بار تغییرشون میده تا بتونه گزارشی که مد نظرشه بدست بیاره
    سوال اصلی اینجا پیش میاد
    یعنی من باید توی برنامم کدی بنویسم که هر بار کاربر تاریخ رو تغییر میده این view های که توشون تاریخ هست همشون آپدیت بشه؟( مثلا 10 تا view همزمان آپدیت بشه بعد select بخوره تا گزارش بدست بیاد؟ )
    این رو هم بگم برنامه با جاوا و دیتا بیس mysql هستش گزارشش رو هم با iReport ساختم

  2. #2

    نقل قول: گزارش سازی در جاوا

    کسی نیست یه راهنمایی کنه؟؟

  3. #3
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: گزارش سازی در جاوا

    به نظرم آره باید دوباره همشون محاسبه بشن. چون شما viewتون رو شرطی بر اساس تاریخ خاصی ساختید. اگر اینطور نبود و همه تاریخ ها در اون view وجود داشته باشه خب فقط یک select میشه.

    اما به نظرم اینجا درست نیست از view استفاده کنید اگر لازمه برای select هربار view آپدیت بشه. اگر view جوری بود که فقط برای insert/delete/update نیاز به آپدیت داشت و همچنین این عملیات ها تعدادشون به نسبت کم باشه و select باعث تغییر view نشه به نظرم خوبه. ولی اینجا نه. چون view ساختن هم خودش هزینه بره به هر حال.

    به نظرم یا بد جدولتون رو طراحی کردید و خیلی اطلاعات رو از هم جدا کردید و هزینه join رو بالا بردید، یا هم اگر راه دیگه ای نیست باید سعی کنید یکم selectهاتون محدود کننده تر باشه. اول هم از جایی شروع کنید که خروجی select کمترین تعداد رو داشته باشه. البته خود دیتابیس ها اکثرا یکسری بهینه سازی دارن و حدس میزنن خروجی چه selectهایی کمتره و اگر بشه اونا رو زودتر انجام میدن.

  4. #4

    نقل قول: گزارش سازی در جاوا

    نقل قول نوشته شده توسط vahid-p مشاهده تاپیک
    به نظرم آره باید دوباره همشون محاسبه بشن. چون شما viewتون رو شرطی بر اساس تاریخ خاصی ساختید. اگر اینطور نبود و همه تاریخ ها در اون view وجود داشته باشه خب فقط یک select میشه.

    اما به نظرم اینجا درست نیست از view استفاده کنید اگر لازمه برای select هربار view آپدیت بشه. اگر view جوری بود که فقط برای insert/delete/update نیاز به آپدیت داشت و همچنین این عملیات ها تعدادشون به نسبت کم باشه و select باعث تغییر view نشه به نظرم خوبه. ولی اینجا نه. چون view ساختن هم خودش هزینه بره به هر حال.

    به نظرم یا بد جدولتون رو طراحی کردید و خیلی اطلاعات رو از هم جدا کردید و هزینه join رو بالا بردید، یا هم اگر راه دیگه ای نیست باید سعی کنید یکم selectهاتون محدود کننده تر باشه. اول هم از جایی شروع کنید که خروجی select کمترین تعداد رو داشته باشه. البته خود دیتابیس ها اکثرا یکسری بهینه سازی دارن و حدس میزنن خروجی چه selectهایی کمتره و اگر بشه اونا رو زودتر انجام میدن.
    ممنون از جوابت ولی کامل متوجه نشدم
    ببین من چند تا فرم دارم یکی دستمزدا ثبت میشه یکی مواد اولیه قیمتاش ثبت میشه یکی سربارها یکی ضایعات یکی مواد اولیه ای که هر محصول رو میسازه و ....
    یعنی فرم ها و تیبل ها جوریه که نمیشه یکی باشه هیچ جوری
    در نتیجه تعداد تیبل هام خیلی زیاد شده تقریبا 30 تا تیبل هستش که از هم جدا هستن ولی برای ساختن گزارش نهایی به 90% تیبل ها نیاز هست یعنی از ترکیسب این تیبل ها هستش که میشه قیمت نهایی رو به دست آورد خواستم سلکت های تو در تو بنویسم ولی خیلی خیلی طولانی و زیاد میشد و احتمال اینکه توش اشتباه پیش بیاد زیاد میشد یعنی برای کمتر از نصف این تیبل ها و ادقامشون بیشتر از 70 سطر کد فقط سلکت شد
    در نتیجه از ویو استفاده کردم از اونجا که تازه کارم و اولین باره دارم با دیتا بیس اون هم در این حجم و اندازه کار میکنم گفتم بچرسم شاید راه بهتری وجود داشته باشه و شاید اصلا کاری که انجام دادم اشتباه باشه چون همین الانش هم تقریبا 10 تا ویو شده تا یه خروجی کامل به دست اومده
    اگه راه بهتری هست لطفا فقط اسمشو هم بگید کافیه میرم سرچ میکنم با اون راه عملیات رو انجام میدیم

  5. #5
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: گزارش سازی در جاوا

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

    اما باز بهتره در انجمن دیتابیس هم مطرح کنید که بیشتر با این مسائل درگیر هستن، من راه بهتری به ذهنم نمیرسه.

  6. #6

    نقل قول: گزارش سازی در جاوا

    یعنی من باید توی برنامم کدی بنویسم که هر بار کاربر تاریخ رو تغییر میده این view های که توشون تاریخ هست همشون آپدیت بشه؟( مثلا 10 تا view همزمان آپدیت بشه بعد select بخوره تا گزارش بدست بیاد؟ )
    منظورتون چی ؟
    وقتی view را یکبار ایجاد میکنید برای همیشه کامپایل میشه و وقتی اطلاعات روی جداول به روز میشوند در فرم های برنامه نیازی به آپدیت View نیست شما ویو را که اجرا کنید آخرین اطلاعات برای شما بر میگردونه تازه سربار کمتری نسبت به اجرای مستقیم Select داره حتی می تونید به ویوها تون هم شرط هم ارسال کنید که مثلا تاریخ های مورد نظر برای شما واکشی کنه و البته تلفیق Routines ها که البته در MySql به این نام هست در SqlServer به نام Stroed Procedure , User Define Function شناخته میشند با View ها به شدت Performance بالایی برای شما داره معمولا خیلی بهتره که از Select های مستقیم کمتر استفاده بشه .
    این تیبل ها و ادقامشون بیشتر از 70 سطر کد فقط سلکت شد
    چون مطمن باشید که وقتی Query Cost Plan با ابزارهای Query Analyzer برای این کوئری 70 خطی بگیرید جواب مفیدی راجع به Performance بهتون نمیده
    به هرحال شما باید اول کوئری هایی که دارید به بخش های مختلف تقسیم کنید و در ویو های مختلف پیاده سازی کنید وبعد با استفاده از روتین ها از اونها استفاده کنید.
    و اینکه شما در طراجی دیتابیس چقدر از Normalize استفاده کردید وچقدر از deNormalize چیزی نیست که بدون مشاهده دیتابیس متوجه شد.
    ولی حدس من این هست که همونطور که دوست عزیز مونم در پست بالا اشاره کرد بیش از حد درگیر نرمال سازی شدید که اینهم اصلا خوب نیست نرمال سازی توام با دی نرمال کردن جداول در برخی مواقع خیلی بهتر جواب میده. اگر بخوام ساده تر بگم منظورم این هست تو برخی جداول اطلاعات تکراری داشته باشید خیلی بهتر از این هست که دیتابیس هزار تکه بشه!!!!
    البته ما در SQL Server و یا Oracal راهکارهایی هم داریم که با اینطور نرمال سازی ها هم بتونیم بازدهی بالاتری داشته باشیم ولی خوب در MY-SQL خیلی از این تکنیکها را نداریم.
    البته استفاده از ایندکس های مناسب و Relation Ship های معقول منطقی در کنار View ها و صدالبته روتین ها خیلی روی بازدهی پایگاه داده تاثیر داره.
    آخرین ویرایش به وسیله farhad_shiri_ex : سه شنبه 08 خرداد 1397 در 01:10 صبح

تاپیک های مشابه

  1. برای گزارش گیری در جاوا باید از چی استفاده کرد ؟
    نوشته شده توسط jeus در بخش Java SE : نگارش استاندارد جاوا
    پاسخ: 1
    آخرین پست: یک شنبه 26 خرداد 1387, 09:37 صبح
  2. عمومی سازی و بومی سازی در جاوا
    نوشته شده توسط zehs_sha در بخش Java SE : نگارش استاندارد جاوا
    پاسخ: 0
    آخرین پست: سه شنبه 22 شهریور 1384, 18:20 عصر
  3. درخواست توضيحاتي درمورد ابزار گزارش سازي در دلفي
    نوشته شده توسط Delphi_Developer در بخش ابزارهای گزارش سازی در دلفی
    پاسخ: 6
    آخرین پست: یک شنبه 12 تیر 1384, 00:31 صبح
  4. گزارش سازی در
    نوشته شده توسط Kambiz Delphi در بخش ابزارهای گزارش سازی در دلفی
    پاسخ: 1
    آخرین پست: یک شنبه 29 آذر 1383, 21:26 عصر
  5. گزارش سازی در
    نوشته شده توسط Kambiz Delphi در بخش برنامه نویسی در Delphi
    پاسخ: 1
    آخرین پست: یک شنبه 29 آذر 1383, 21:26 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •