PDA

View Full Version : چه پیشنهادی برای ذخیره تعداد رکوردهای زیاد دارید؟



alinaghiha
پنج شنبه 03 آبان 1386, 23:44 عصر
من فرمی ساختم که دارای اطلاعات یک انبار هستش
روزانه به طور متوسط ده قلم کالا وارد و ده قلم خارج میشه
کاملا مشخصه که اگه من این داده ها رو داخل یک جدول بذارم تا سر سال یه جدول سنگین با سرعت پایین خواهم داشت
چه پیشنهادی دارید.
جدول روزانه - ماهانه- سه ماهه - سالیانه
آیا این جداول رو داخل یک database بسازم یا نه جدا کنم و دیتا بیس جدید درست کنم
از SQL هم استفاده نمی کنم
دستورات دسترسی من به دیتا بیس از طریق OleDb هستش

RezaKia
جمعه 04 آبان 1386, 02:13 صبح
سلام،

این که حجم جدول شما تا جه حد میتواند باشد ارتباط مستقیم با پایگاه داده شما دارد.

مثلا در SQL 2000 بر اساس تعاریف سیستمی تا حدود 4GB و در Access تا 500MB بدون هیچ مشکلی کار خواهند کرد؛ اگر و فقط اگر طراحی و روش کار شما با DB درست باشد.

شما از چه نوع منبع داده استفاده کرده اید؟ Text, XML, Binary, Access, Oracle, My SQL , .....
میتونید نوع پایگاه داده خود را معین کنید؟

alinaghiha
شنبه 05 آبان 1386, 00:09 صبح
از Access استفاده می کنم البته با کمک SQL
این نمونه کد در استفاده از بانک اطلاعاتی



Dim con AsNew OleDbConnection(
"provider=microsoft.jet.oledb.4.0;data source=c:\rajaeidb.mdb"
)
Dim dataset AsNew DataSet
Dim Kalaoledbdataadapter AsNew OleDbDataAdapter("select * from Kala where KalaMojodi<KalaMin", con)
dataset.Clear()
con.Open()
Kalaoledbdataadapter.Fill(dataset, "Kala")
DGKala.DataSource = dataset.Tables("Kala") ' DGKala is DataGridView
con.Close()
fill_Kalatitele(DGKala)

فایل Access من بدون هیچ داده ای 589kb

saeed_rezaei
شنبه 05 آبان 1386, 17:21 عصر
سلام.
در سیستمهای مالی، کلا بانکها بر اساس سال زمانی بندی می شن.
در پایان هر سال جدولی جدید ایجاد می شه که موجودی آخر دوره سال قبل به عنوان مقداره اولیه درش ذخیره می شه.
همانطور که قبلا هم ذکر شد، رابطه زیادی داره با طراحی جداولت. چه آیتمهایی در چه فیلدهایی ذخیره بشن.
چنانچه براتون خیلی مهمه که حجم جداولتون پایین باشه، بهتره با استفاده ازکد بیشتر و برنامه نویسی پیشرفته تر، ترتیبی بدید که برای هر کالا، به صورت دینامیک در طی روند اجرای برنامه، یک جدول توسط کاربر ایجاد بشه. اینجوری تعداد جداولتون زیاد می شه اما حجم همه کمتره. در عوض باید الگوریتم قوی تری داشته باشد برای مدیریتها. (قابلیتی شبیه برنامه های طراح فرم). من که هیچ وقت حاضر نیستم این راه رو برم.

shervinrv
شنبه 05 آبان 1386, 18:46 عصر
ببخشید میشه در این زمینه من یه سول بپرسم؟
این حجم 4 گیگ برای Sql
حدودا چند رکورد میشه؟
با شرایط اینکه رکود ها کد اچ تی ام باشن
ینی هر رکورد کد اچ تی ام یک صفحه هست حدودا با محتوای همین تاپیک حالا یه ذره بیشتر
ینی تکست هست دیگه
چون دارم رو یه پروژه کار میکنم
این سوال برای منم پیش اومده بود
حالا اگه برای تعداد رکورد های بالای 500 هزار تا 4 گیگ کم باشه چه پیشنهادی شما به من میکنید؟

alinaghiha
شنبه 05 آبان 1386, 22:03 عصر
سلام.
در سیستمهای مالی، کلا بانکها بر اساس سال زمانی بندی می شن.
در پایان هر سال جدولی جدید ایجاد می شه که موجودی آخر دوره سال قبل به عنوان مقداره اولیه درش ذخیره می شه.
همانطور که قبلا هم ذکر شد، رابطه زیادی داره با طراحی جداولت. چه آیتمهایی در چه فیلدهایی ذخیره بشن.
چنانچه براتون خیلی مهمه که حجم جداولتون پایین باشه، بهتره با استفاده ازکد بیشتر و برنامه نویسی پیشرفته تر، ترتیبی بدید که برای هر کالا، به صورت دینامیک در طی روند اجرای برنامه، یک جدول توسط کاربر ایجاد بشه. اینجوری تعداد جداولتون زیاد می شه اما حجم همه کمتره. در عوض باید الگوریتم قوی تری داشته باشد برای مدیریتها. (قابلیتی شبیه برنامه های طراح فرم). من که هیچ وقت حاضر نیستم این راه رو برم.
این که خیلی کار می بره منم حال دردسر ندارم
یه سال خیلی زیاده برا فایل اکسس زیاد نیست

saeed_rezaei
شنبه 05 آبان 1386, 22:13 عصر
سلام.
برای فایل اکسس زیاد نیست. رابطه مستقیم با نحوه طراحی دیتابیست داره که چه فیلدهایی رو به چه صورتی ذخیره کنی.
همین حالاش توی اداره ما، یه برنامه کنترل موجودی انبار هست که چندین ساله داره بدون مشکل کار میکنه. همه هم ازش راضین. البته کلا با اکسس نوشتن.
به همون روشی هم که گفتیم، از یه سال به سال دیگه انتقال موجودیش می دن.

alinaghiha
شنبه 05 آبان 1386, 22:28 عصر
سلام.
برای فایل اکسس زیاد نیست. رابطه مستقیم با نحوه طراحی دیتابیست داره که چه فیلدهایی رو به چه صورتی ذخیره کنی.
همین حالاش توی اداره ما، یه برنامه کنترل موجودی انبار هست که چندین ساله داره بدون مشکل کار میکنه. همه هم ازش راضین. البته کلا با اکسس نوشتن.
به همون روشی هم که گفتیم، از یه سال به سال دیگه انتقال موجودیش می دن.
من از این روش که بالا نوشتم استفاده می کنم برا 100 رکورد کند به نظر میاد چه برسه به 36500 رکورد در سال
شاید روش من ایراد داره یا سیستمم (هاردم)
ممنون
برای سال مالی جدید چه کاری با جدولام انجام بدم
اسماشونو عوض کنم یا راه حل دیگه ای دارید
البته کاربر ممکنه نیاز داشته باشه که از اطلاعات سال قبلش گزارش بگیره

saeed_rezaei
شنبه 05 آبان 1386, 23:21 عصر
توی برنامه ، در قسمت امکانات، یه منویی طراحی شده با نام انتقال سال.
قبل یه کپی از بانک می گیریم به اسم سال قبل ذخیره می کنم مثلا 85، برای همون گزارش که گفتید.
بعد انتقال سال رو که می زنیم، سیستم می یاد یه موجودی از انبار می گیره. بعدش سیستم مانده موجودی رو محاسبه میکنه، سپس جدول رو خالی کرده و مانده موجودی رو با عنوان موجودی اول دوره به جدول اضافه می کنه. حالا جدول فقط چند تا رکورد می تونه داشته باشه.
و البته بهتره در این زمینه با کسی که حداقل دیپلم حسابداری داره، صحبت کنید. اونها این چیزها رو بهتر می دونن.

RezaKia
شنبه 05 آبان 1386, 23:21 عصر
سلام،


ببخشید میشه در این زمینه من یه سول بپرسم؟
این حجم 4 گیگ برای Sql
حدودا چند رکورد میشه؟
با شرایط اینکه رکود ها کد اچ تی ام باشن
ینی هر رکورد کد اچ تی ام یک صفحه هست حدودا با محتوای همین تاپیک حالا یه ذره بیشتر
ینی تکست هست دیگه
چون دارم رو یه پروژه کار میکنم
این سوال برای منم پیش اومده بود
حالا اگه برای تعداد رکورد های بالای 500 هزار تا 4 گیگ کم باشه چه پیشنهادی شما به من میکنید؟


برای محاسبه حجم هر رکورد، در هنگامی که در حالت تغییر ساختار جدول هستید؛ «در 2000 روی اسم جدول کلیک راست بکنید و بعد گزینه Design رو انتخاب کنید» اعداد مربوط به ستون تعداد بایتهای تمام فیلدها را جمع کرده تا در انتها به عدد لازم برای هر رکورد برسید.

حال، عدد بدست آمده را در تعداد رکوردهای مورد نظر ضرب کنید حجم کل رکوردها بدست می آید.

البته این عدد تخمینی است چون عواملی مثل شاخص را در نظر نگرفته ایم. اما قابل قبول است چون به عدد واقعی بسیار نزدیک است.


مثلا:
اگر هر رکورد دارای یک فیلد Identity از نوع Integer و یک فیلد برای محتوای HTML از نوع Varcharبا طول 8000 باشد؛ داریم:

4 + 8000 = 8004 Bytes

4 gb=4 * 1024 * 1024 * 1024 --> 4 gb = 4294967296 Bytes

4294967296 / 8004 = 536602.6106946526736631684157921 ~= 536603


یعنی این جدول تقریباَ میتونه شامل 536603 «پانصد و سی و شش هزار و ششصد و سه» رکورد باشه.

البته اگر از Text به جای Varchar استفاده کنید داریم:

4 + 16 = 20
4294967296 / 20 = 214748364.8 ~ 214748365


یعنی با این تغییر ساده تعداد رکوردها به عدد 214748365 «دویست و چهارده میلیون و هفتصد و چهل و هشت هزار و سیصد و شصت و پنج» افزایش می یابد.

در حقیقت با تغییر نوع فیلد حاوی متون HTML از Varchar به Text میزان رکوردهای مجاز 400 برابر میشود.

طبیعتا 400 برابر رقم وسوسه برانگیزیه. اما به همون نسبت هم کار با نوع Text دارای محدودیتهای خاص خودشه.

حالا بگید دقیقا برای چی HTML نگه میدارید؟ شاید راه حل بهتری هم باشه.

موفق باشید. :تشویق:

alinaghiha
یک شنبه 06 آبان 1386, 23:25 عصر
ممنون از دوستان
از راهنمایتون ممنونم
برنامه ای که مینویسم واسه امور خیریه است و حسابدارش هوای منو داره