PDA

View Full Version : ورود یک میلیارد رکورد به دیتا بیس



farnaz2003
یک شنبه 08 بهمن 1385, 11:31 صبح
من داده هایی در فایل دارم که می خواهم آنها را به دیتابیس منتقل کنم تا بتونم ایندکس شان کنم. (حدود یک میلیارد رکورد می شود.)
چطور می تونم این کار را در کمترین زمان انجام بدهم و بعد از ایندکس شدن چطوری در کمترین زمان آنها را از دیتا بیس بخونم.
مرسی

zerobit-ltd
یک شنبه 08 بهمن 1385, 12:40 عصر
فرمت فایلت چیه؟
شاید بتونی از dts استفاده کنی. ولی به نظر من، بهترین راه اینه که یه برنامه بنویسی که این کارو واست انجام بده. چون dts بعضی جاها یه کم اذیت می کنه.
بعد روی هر فیلدی که بخوای ایندکس می ذاری. در گذاشتن ایندکس موارد زیر رو رعایت کن:
1) روی فیلد یا فیلدهایی ایندکس بذار که تو قسمت where بیشتر از اونا استفاده می کنی.
2) بهتره ایندکس رو فیلدهای عددی بذاری.
3) از ایندکس خوشه ای هم می تونی استفاده کنی. چون تعداد رکوردات زیاده.

AminSobati
یک شنبه 08 بهمن 1385, 13:15 عصر
اگر فایلها در ساختاری هستند که برای دستور BULK INSERT قابل درک هست، این دستور از تمام حالتهای ممکن سرعت بالاتری داره. بخصوص که میتونین Recovery Model دیتابیس رو موقع Insert روی Bulk-Logged تنظیم کنید تا باز هم وضعیت بهتر بشه

farnaz2003
چهارشنبه 11 بهمن 1385, 08:01 صبح
فایل ها باینری هستند و نوع داده ها هم int است.
من نه در مورد dts چیزی می دونم و نه در موردBULK INSERT .
در ضمن می خواستم بدونم با این روش ها چقدر زمان می بره؟

taheri-ali
چهارشنبه 11 بهمن 1385, 08:26 صبح
خانوم عزیز من یه جایی خوندم که sql server ماکزیموم رکوردهایی که می تونه تو دیتا بیس نگهداری کنه یک میلیارده با این حساب شما باید از اوراکل استفاده کنید

ali_kolahdoozan
چهارشنبه 11 بهمن 1385, 08:36 صبح
خانوم عزیز من یه جایی خوندم که sql server ماکزیموم رکوردهایی که می تونه تو دیتا بیس نگهداری کنه یک میلیارده با این حساب شما باید از اوراکل استفاده کنید

این از نظر حجمش سندش هم خود sql . اما تعداد رکورد رو من پیدا نکردم


A maximum of 32,767 databases can be created on a server.

بسیار مشتاقم این جایی که خوندین رو اعلام کنید . با تشکر

farnaz2003
چهارشنبه 11 بهمن 1385, 10:20 صبح
[quote=ali_kolahdoozan;303548]این از نظر حجمش سندش هم خود sql . اما تعداد رکورد رو من پیدا نکردم


منظورتان را متوجه نمی شوم. من یک دیتا بیس و یک جدول دارم که سه تا ستون و یک میلیارد سطر داره.
و در مورد استفاده از اوراکل
bulk insert را می تونم در اوراکل استفاده کنم؟ چطوری؟

hmm
چهارشنبه 11 بهمن 1385, 11:03 صبح
http://www.barnamenevis.org/forum/showthread.php?t=60436

حمیدرضاصادقیان
چهارشنبه 11 بهمن 1385, 13:33 عصر
فکر کنم بهترین راه همون dts باشه که خیلی راحته. یا میتونی یک نرم افزار کوچیک بنویسی به راحتی همرو توی sql اضافه کنی.هیچ نیازی هم به استفاده از اوراکل نیست.sql servre به راحتی جواب شما را خواهد داد.فقط محدودیت سخت افزاری نباید داشته باشید از قبیل فضای هارد و فضای مورد نیاز برای پردازش گزارشات و ...

ali_kolahdoozan
چهارشنبه 11 بهمن 1385, 13:49 عصر
فقط باید مواظب حجم db باشی از 32,767 نزنه بالا

mehranFX
چهارشنبه 11 بهمن 1385, 13:53 عصر
اگر فایلها در ساختاری هستند که برای دستور BULK INSERT قابل درک هست، این دستور از تمام حالتهای ممکن سرعت بالاتری داره. بخصوص که میتونین Recovery Model دیتابیس رو موقع Insert روی Bulk-Logged تنظیم کنید تا باز هم وضعیت بهتر بشه
یه دختر خوب وقتی یه استاد بهش یه چیزی می گه ، گوش می کنه ! اگر نمیدونی Bulk Insert چی هست کافیه سری به Help نرم افزار SQL Server بزنی تا ببینی چیه !
خوش باشی !

DonetKarvb
چهارشنبه 11 بهمن 1385, 13:56 عصر
این از نظر حجمش سندش هم خود sql . اما تعداد رکورد رو من پیدا نکردم


A maximum of 32,767 databases can be created on a server.

بسیار مشتاقم این جایی که خوندین رو اعلام کنید . با تشکر

حجم؟؟؟؟ یا تعداد دیتابیس ها؟؟ :متفکر:


خانوم عزیز من یه جایی خوندم که sql server ماکزیموم رکوردهایی که می تونه تو دیتا بیس نگهداری کنه یک میلیارده با این حساب شما باید از اوراکل استفاده کنید
نه این یک تصور و تفکر اشتباه است که صحت هم ندارد.
یه لینک زیر بروید
http://www.wintercorp.com/VLDB/2005_...nners_2005.asp (http://www.wintercorp.com/VLDB/2005_TopTen_Survey/TopTenWinners_2005.asp)
و گزینه های زیر را انتخاب کنید.
Metric=Number of rows
Platform= All
Usage=OLTP
میبینید که شرکت Verizon Communications از نرم ازفزار SQlServe استفاده میکند و بالای 50 میلیارد رکورد دارد.

حالا در مودر Ipmort کرد داده ها.

اگر اشتباه نکنم منظور استاد این بوده که شما یک فایل داشته باشید که ساختار متناوبی داشته باشه مثلا

@ali/mohammadi/35/iran@Hoessin/samadi/20/iran در فایل شما همچین اطلاعاتی رو داشته باشید که فیلد ها با / از هم جدا شده باشند و رکورد ها با @. خوب این به سادگی برای SQL قابل درک است و شما میتونی به یک دستور ساده اون رو به SQL منتقل کنید ولی اگر ساختار قابل درکی ندارد بیاد براش فکری بکنید.
راستش من نمیدونم این فایل توسط چه برنا مه ای ایجاد شده است. ذهنم رفته سراغ این که این یک برنامه است که C++ نوشته شده است

linux
چهارشنبه 11 بهمن 1385, 15:49 عصر
فقط باید مواظب حجم db باشی از 32,767 نزنه بالا
چه ربطی داره؟ حجم چی از 32767 بالا نزند؟ 32767 چی؟؟!
اگر مطلبی را کامل متوجه نشدید توضیح ندهید!
این محدودیتی که هست یعنی یک سرور حداکثر می تواند 33767 تا دیتابیس داشته باشد.
Feature SQL Server 2000 Access 2000 database size 1,048,516 TB 2 GB plus linked tables size objects in a database 2,147,483,647 32,768 user name length 128 20 password length 128 14 table name length 128 64 column name length 128 64 index name length 128 64 Number of concurrent users limited by available memory 255 columns per table 1024 255 table size limited by available storage 1 GB number of indexes in a table 250 32 number of columns in an index 16 10 bytes per row 8060 2000 number of tables in a query 256 32 columns per SELECT statement 4096 255 nested subqueries 32 50 number of enforced relationships 253 32 SQL statement size 65,536 * Network packet size
(4 KB, by default) approximately 64,000
جدول مقایسه sql با اکسس
هیج محدودیتی برای ذخیره ردیف ها در یک جدول نیست بجز محدودیت سخت افزاری

AminSobati
چهارشنبه 11 بهمن 1385, 18:33 عصر
خانوم عزیز من یه جایی خوندم که sql server ماکزیموم رکوردهایی که می تونه تو دیتا بیس نگهداری کنه یک میلیارده با این حساب شما باید از اوراکل استفاده کنید

SQL Server محدودیتی برای ذخیره اطلاعات نداره مگر اینکه هارد دیسک شما محدودیت ایجاد کنه!

42li42li
چهارشنبه 23 آبان 1386, 12:27 عصر
اگه باینری هست که یه برنامه بنویس
اگه text هست اینپورت sql بهترین گزینس
کمتر از 1 دقیقه این کارو میکنه
من فایل 50 ستونه 1200000 رکوردی در عرض 1 دقیقه اینپورت کردم