-
March 24th, 2017, 05:02
#1
عضو انجمن
استفاده از پایگاه های nosql برای ذخیره سازی 300 میلیون رکورد اطلاعات
سلام
من حدود 300 میلیون رکورد اطلاعات دارم ک خیلی هاش تکراریه
و با فرمت های مختلفی هست
یه سری هاش فایل sql هست
یه سری اکسس
یه سری هم تو فایل تکست هست ک با , یا : از هم جدا شدند
خالا می خوام همه اینا رو بکنم یه دیتابیس ک بتونم تو برنامه ازشون استفاده کنم
بهم پیشنهاد دادن از دیتابیس های غیر رابطه ای nosql استفاده کنم
حالا کدوم بهتره و ایا می شه همه این فایل ها رو باهم تو دیتابیسی جمع آوری کرد و تکراری هاش رو حذف کرد
ممنون می شم کسایی ک بلدن راهنمایی کنن
شرکت فنی و مهندسی دانش بنیان پاسارگاد تلگرام: 09101004330 احمد مهدیلو
سفارش ها در http://021host.eu
تماس مستقیم : 00436889587387 Telegram: @mahdilou
-
-
March 24th, 2017 05:02
# ADS
-
March 24th, 2017, 05:32
#2
عضو جدید
پاسخ : استفاده از پایگاه های nosql برای ذخیره سازی 300 میلیون رکورد اطلاعات
با سلام
دوست عزیز این نظر شخصی بنده بعد از 8 سال تجربه کاری تو این زمینه اس (حالا من این مطلبو میگم باز یه سری دوستان فول متخصص که فرق کارل پی اچ پی و زبان کرل رو نمیدونن نیان بگن دیتابیس چه ربطی به فریم وورک داره . این فقط یه مثاله ک دوستمون متوجه بشه !!!!!!!!!!!!!!!! )
بانک اطلاعاتی database یه شباهت جزئی به فریم وورک ها داره . کار رو آسون تر میکنه . یعنی دیتابیس چیزیه که هر کسی میتونه باهاش کار کنه و به قول دوستمون که اینجا تاپیک زده بود در مورد یه فریم وورک کار راه بندازه . ولی خب از سرعت خیلی خیلی پایینی برخورداره . شاید کسایی که تازه کارن پیش خودشون بگن نه . ما که تا صفحه رو لود میکنیم خروجی سمت کلاینت بارگذاری میشه . سرعتش بالاس پس امثال استکی چی میگن سرعت phpmyadmin پایینه ؟ ولی خب این حقیقته که برنامه نویس های بزرگتر از من هم قبولش دارن . که کوئری های دیتابیس سرعت چشم گیر پایین دارن و همینطور منابع زیادی سمت سرور مصرف میکنن از جمله رم و سی پیو . مسلما شما نمیتونید سرعت پردازش یک اسکریپت NoSQL و یک اسکریپت پایگاه داده Database رو با هم یکی کنید . شاید به قول معروف با چشم غیر مسلح قابل دیدن نباشن چون تفاوتشون صدم ثانیه ایه . ولی خب واسه کسی مث من که برنامه نویس چت رومه و اسکریپت های فول اختصاصی برای چت روم مینویسه (مثل آخرین پروژم که اسکریپت NoSQL چت رومه) این صدم ثانیه خیلی چشم گیره . و من باید اونو ملاک کارم قرار بدم . ولی خب یه جایی هم میرسه که شما به دیتابیس نیاز دارید . مثلا همین پروژه های چت روم من . تا چند وقت پیش همه اطلاعات رو NoSQL میکردم به جز لیست کاربران و لیست پیام های کاربران . چون داخل چت روم یکی لیست کاربرانه که از تیبل آنلاینز خونده میشه معمولا و یکی لیست پیام هاس که به تیبل پیام ها مدام درخواست ارسال میشه از سمت کلاینت select & insert . واسه همین برای خود بنده سخت بود که این دوتا تیبل رو بیارم داخل پوشه ها و فایل ها و کاری کنم که سرعتش نه تنها کمتر نشه بلکه بیشترم بشه . واسه همین تموم قسمت هارو NoSQL میکردم به جز قسمت آنلاین ها و پیام تا اینکه چند ماهیه یه تکنیک جالب یاد گرفتم که دیگه کلا phpmyadmin رو حذف میکنم و حتی پیام ها و انلاین هارو میارم داخل فایل ها و البته سرعت رو هم چندین برابر کردم .
پیشنهاد من به شما اینه . ببینید چی نیاز دارید ؟ کدومش برای شما بهتره . اگر ملاک کار شما سرعته که خب بدون شک NoSQL بهتر انتخابه . اگر ملاک کار شما سرعت نیست و مواردی همچون زمان و سرعت و امکاناته که خب اصلا از نظر این سه تا مورد اصلا نمیشه NoSQL رو با DataBase مقایسه کرد و دیتابیس سرتره
شما باید ببینید نیازتون چیه !
ویرایش توسط phpcoding : March 24th, 2017 در ساعت 05:35
انجام پروژه های:php-c#-c++-java-basic-css-html-javascript-python
مشاوره با مسئول پروژه ها-حامد دعایی:+989901567129
تماس با برنامه نویس-امیرعلی استکی:+989017735378
-
-
March 24th, 2017, 05:43
#3
عضو انجمن
پاسخ : استفاده از پایگاه های nosql برای ذخیره سازی 300 میلیون رکورد اطلاعات
ممنون از شما دوست عزیز
نیاز رو که فکر می کنم به طور کامل توضیح دادم
خود من هم بیش از 10 ساله دارم با دیتابیس ها کار می کنم و از همه توانایی هاشون آگاهم و تسلط دارم
اما به پیشنهاد چند تا از دوستان خارجی می خواستم mongodb رو نصب کنم و این کارا رو انجام بدم
اما یکی دیگه از همکاران گفتن CouchDB یا RavenDB رو استفاده کنم
اما چون شخضا تجربه کار با اینا رو نداشتم به معایب و مزایاشون آگاه نیستم و خواستم از دوستانی ک وارد ترند کمک بگیرم
شرکت فنی و مهندسی دانش بنیان پاسارگاد تلگرام: 09101004330 احمد مهدیلو
سفارش ها در http://021host.eu
تماس مستقیم : 00436889587387 Telegram: @mahdilou
-
-
March 24th, 2017, 05:48
#4
عضو جدید
پاسخ : استفاده از پایگاه های nosql برای ذخیره سازی 300 میلیون رکورد اطلاعات
در مورد revendb که چیزی نشنیدم
ولی کاوچ دی بی که تقریبا همون NoSQL هستش با این تفاوت که نرم افزار میزبان داره مثل PHPMyAdmin . و یه سری فرق های جزئی دیگه
مانگو دی بی هم اصلا در این مورد پیشنهاد نمیکنم
بهترین راه برای شما که سرعت ملاک کارتونه استفاده از NoSQL خالصه . یعنی ذخیره اطلاعات در فایل ها و خوندن فایل ها با توابعی مثل file_get_contents یا fopen روی همون هاست میزبان
انجام پروژه های:php-c#-c++-java-basic-css-html-javascript-python
مشاوره با مسئول پروژه ها-حامد دعایی:+989901567129
تماس با برنامه نویس-امیرعلی استکی:+989017735378
-
-
March 24th, 2017, 18:03
#5
پاسخ : استفاده از پایگاه های nosql برای ذخیره سازی 300 میلیون رکورد اطلاعات

نوشته اصلی توسط
phpcoding
در مورد revendb که چیزی نشنیدم
ولی کاوچ دی بی که تقریبا همون NoSQL هستش با این تفاوت که نرم افزار میزبان داره مثل PHPMyAdmin . و یه سری فرق های جزئی دیگه
مانگو دی بی هم اصلا در این مورد پیشنهاد نمیکنم
بهترین راه برای شما که سرعت ملاک کارتونه استفاده از NoSQL خالصه . یعنی ذخیره اطلاعات در فایل ها و خوندن فایل ها با توابعی مثل file_get_contents یا fopen روی همون هاست میزبان
شرمنده از استارتر
آیا یک فایل متنی با 300 میلیون خط تکس خوندن سرچ و ... از یک دیتابیس 300 میلیون خطی سریع تر هست ؟
و یک توضیح جامع بدید از nosql چون بنده هم دیتابیس سنگینی دارم که هرچقدر هم بخوام اون رو چندین تیبل کنم باز هم سرعت خوندن کم هست ( موتور innodb)
ویرایش توسط hoka : March 24th, 2017 در ساعت 18:04
-
-
March 24th, 2017, 20:57
#6
عضو جدید
پاسخ : استفاده از پایگاه های nosql برای ذخیره سازی 300 میلیون رکورد اطلاعات

نوشته اصلی توسط
hoka
شرمنده از استارتر
آیا یک فایل متنی با 300 میلیون خط تکس خوندن سرچ و ... از یک دیتابیس 300 میلیون خطی سریع تر هست ؟
و یک توضیح جامع بدید از nosql چون بنده هم دیتابیس سنگینی دارم که هرچقدر هم بخوام اون رو چندین تیبل کنم باز هم سرعت خوندن کم هست ( موتور innodb)
اشتباه شما و یه سری دیگه از دوستان اینه که فک کردید خط فرمان php هم مثل ویندوزه . درسته اگه یک فایل با سیصد میلیون لاین رو داخل ویندوز باز کنید نه تنها نرم افزار میزبان هنگ میکنه بلکه مجبور میشید سیستم رو ری استارت کنید . ولی پی اچ پی مگه ویندوزه که بخواد فایلی رو بخونه و هنگ کنه ؟
بله دوست عزیز یک فایل با سیصد میلیون لاین از یک دیتابیس خیلی خیلی خیلی سبک تره . بخاطر زیاد بودن محتوای فایل هم سرعت کمتر نمیشه . در صورت زیاد بودن فایل ها سرعت کم میشه ولی وقتی فقط یه فایل باشه با میلیون ها لاین سرعت به مشکلی نمیخوره . چون فقط یک کوئری برای خوندن فایل هست اونم این :
کد PHP:
file_get_contents("address.txt");
وسلام . حالا هر چند خط که میخواد باشه . سرعتش بالاس !!!
انجام پروژه های:php-c#-c++-java-basic-css-html-javascript-python
مشاوره با مسئول پروژه ها-حامد دعایی:+989901567129
تماس با برنامه نویس-امیرعلی استکی:+989017735378
-
تعداد تشکر ها از phpcoding به دلیل پست مفید
-
March 25th, 2017, 00:15
#7
عضو انجمن
پاسخ : استفاده از پایگاه های nosql برای ذخیره سازی 300 میلیون رکورد اطلاعات

نوشته اصلی توسط
phpcoding
اشتباه شما و یه سری دیگه از دوستان اینه که فک کردید خط فرمان php هم مثل ویندوزه . درسته اگه یک فایل با سیصد میلیون لاین رو داخل ویندوز باز کنید نه تنها نرم افزار میزبان هنگ میکنه بلکه مجبور میشید سیستم رو ری استارت کنید . ولی پی اچ پی مگه ویندوزه که بخواد فایلی رو بخونه و هنگ کنه ؟
بله دوست عزیز یک فایل با سیصد میلیون لاین از یک دیتابیس خیلی خیلی خیلی سبک تره . بخاطر زیاد بودن محتوای فایل هم سرعت کمتر نمیشه . در صورت زیاد بودن فایل ها سرعت کم میشه ولی وقتی فقط یه فایل باشه با میلیون ها لاین سرعت به مشکلی نمیخوره . چون فقط یک کوئری برای خوندن فایل هست اونم این :
کد PHP:
file_get_contents("address.txt");
وسلام . حالا هر چند خط که میخواد باشه . سرعتش بالاس !!!
جناب جسارته حق با شماست سرعت کار این تابع file_get_contents بالاست اما به دلیل اینکه تمامی محتویات فایل رو در رم buffer میکنه مصرف رم خیلی زیادی می تونه در فایل های حجیم داشته باشه.
برای همین اکثراً در کار با فایل های حجیم در PHP پیشنهاد میکنن که به جای file_get_contents از تابع fopen برای ایجاد یک file pointer و سپس از تابع fgets برای خواندن تیکه تیکه فایل (مثلاً خط به خط) استفاده کنن.
چون اینطوری تابع fgets فقط همون مقدار از فایل که نیازه رو تو مموری بافر میکنه و نه ممکنه که اخطار سر ریز بافر در حجم های خیلی بالا پیش بیاد و نه مشکل مصرف بیش از حد رم داره.
نمونه کد در این لینک: http://stackoverflow.com/questions/1...e-files-in-php که البته طبق گفته این لینک که درست هم هست علاوه بر مشکل سرعت و بافر در حجم های خیلی زیاد ممکنه مشکل Time Out هم پیش بیاد.
همچنین درباره سرعت دیتابیس نسبت به فایل هم پیشنهاد میکنم لینک های زیر رو مطالعه کنید:
http://stackoverflow.com/questions/6...database-speed
http://stackoverflow.com/questions/8...e-access-speed
درسته فایل دسترسی سریع تری داره اما در مقیاس اطلاعاتی خیلی زیاد برای خود مدیر سایت مشکل ساز میشه و حتی بعداً اگه بخواد سایت رو بفروشه نمی تونه.
-
تعداد تشکر ها از AtrafNet به دلیل پست مفید
-
March 25th, 2017, 01:07
#8
پاسخ : استفاده از پایگاه های nosql برای ذخیره سازی 300 میلیون رکورد اطلاعات

نوشته اصلی توسط
AtrafNet
جناب جسارته حق با شماست سرعت کار این تابع file_get_contents بالاست اما به دلیل اینکه تمامی محتویات فایل رو در رم buffer میکنه مصرف رم خیلی زیادی می تونه در فایل های حجیم داشته باشه.
برای همین اکثراً در کار با فایل های حجیم در PHP پیشنهاد میکنن که به جای file_get_contents از تابع fopen برای ایجاد یک file pointer و سپس از تابع fgets برای خواندن تیکه تیکه فایل (مثلاً خط به خط) استفاده کنن.
چون اینطوری تابع fgets فقط همون مقدار از فایل که نیازه رو تو مموری بافر میکنه و نه ممکنه که اخطار سر ریز بافر در حجم های خیلی بالا پیش بیاد و نه مشکل مصرف بیش از حد رم داره.
نمونه کد در این لینک:
http://stackoverflow.com/questions/1...e-files-in-php که البته طبق گفته این لینک که درست هم هست علاوه بر مشکل سرعت و بافر در حجم های خیلی زیاد ممکنه مشکل Time Out هم پیش بیاد.
همچنین درباره سرعت دیتابیس نسبت به فایل هم پیشنهاد میکنم لینک های زیر رو مطالعه کنید:
http://stackoverflow.com/questions/6...database-speed
http://stackoverflow.com/questions/8...e-access-speed
درسته فایل دسترسی سریع تری داره اما در مقیاس اطلاعاتی خیلی زیاد برای خود مدیر سایت مشکل ساز میشه و حتی بعداً اگه بخواد سایت رو بفروشه نمی تونه.
به نظر بنده هم همین موضوع هست که کار با یک فایل بسیار بسیار بزرگ در حد 20 گیگ ( حدود 300 میلیون خط ) در یک سرور معمولی بسیار سخت هست . به دو دلیل . اول اینکه شما باید یک فایل رو مدام در حال ادیت قرار بدید ( اگر دیتابیس ایستا باشه مثل تیبل پست های وردپرس مشکلی نیست ) ولی اگر یک دیتابیس با این حجم مدام در حال نوشتن و ویرایش باشه قطعا به مشکل خواهد خورد دقیقا مثل موتور MyISAM که کوئری ها در صف قرار میگیرن
بنده خودم الان سخت به دنبال روشی هستم که سرعت کار با دیتابیسم رو افزایش بده و قطعا فردا دیتابیس رو در یک فایل متنی مثل csv میریزم و تست میکنم . البته که خود phpmyadmin از موتور csv پشتیبانی میکنه ولی هیچ کس توصیه نمیکنه
- - - Updated - - -

نوشته اصلی توسط
phpcoding
اشتباه شما و یه سری دیگه از دوستان اینه که فک کردید خط فرمان php هم مثل ویندوزه . درسته اگه یک فایل با سیصد میلیون لاین رو داخل ویندوز باز کنید نه تنها نرم افزار میزبان هنگ میکنه بلکه مجبور میشید سیستم رو ری استارت کنید . ولی پی اچ پی مگه ویندوزه که بخواد فایلی رو بخونه و هنگ کنه ؟
بله دوست عزیز یک فایل با سیصد میلیون لاین از یک دیتابیس خیلی خیلی خیلی سبک تره . بخاطر زیاد بودن محتوای فایل هم سرعت کمتر نمیشه . در صورت زیاد بودن فایل ها سرعت کم میشه ولی وقتی فقط یه فایل باشه با میلیون ها لاین سرعت به مشکلی نمیخوره . چون فقط یک کوئری برای خوندن فایل هست اونم این :
کد PHP:
file_get_contents("address.txt");
وسلام . حالا هر چند خط که میخواد باشه . سرعتش بالاس !!!
البته کوئری زیاد هست ولی بدترین کوئری این کوئری ای که معرفی کردید هست به دلیل اینکه تمام فایل به یکباره در سیستم باز میشه بدون هیچ لیمیتیشنی . حتی دیتابیس رو هم لیمیت قرار میدن براش چه برسه به یک فایل چند ده گیگی . شما از nosql در فایل های چندین گیگی دینامیک استفاده میکنید ؟
ویرایش توسط hoka : March 25th, 2017 در ساعت 01:12
-
-
March 25th, 2017, 02:11
#9
پاسخ : استفاده از پایگاه های nosql برای ذخیره سازی 300 میلیون رکورد اطلاعات
بهترین حالت هنوز Mysql هست به شرط اینکه اطلاعات را بین تعداد زیادی table تقسیم کنید .
من یک اسکریپت که سال های گذشته واسه یک دوست نوشتم که تعداد row هاش بسیار بسیار زیاد بود ( تا جایی یادم بود 50 میلیون عدد ) ( لاگ و ip و ... ذخیره میشد )
table پایه رو شماره گذاری کردم از 000001 تا 999999 و از table پایه کپی برداری کردیم روی همه ی table ها کمی زمان برد اما هنوز که هنوزه بعد از چندسال هنوز داره با یک vps ram 4 این همه داده رو استفاده میکنه با بیشترین سرعت ممکن .
واسه مشخص کردن شماره ی table هم یک فانکشن گذاشتیم که با توجه به اون درخواست و مقدار های ip و زمانش یک عدد بین این اعداد خروجی داده بشه و شماره ی table مشخص بشه .
-
-
March 25th, 2017, 05:25
#10
عضو جدید
پاسخ : استفاده از پایگاه های nosql برای ذخیره سازی 300 میلیون رکورد اطلاعات

نوشته اصلی توسط
AtrafNet
جناب جسارته حق با شماست سرعت کار این تابع file_get_contents بالاست اما به دلیل اینکه تمامی محتویات فایل رو در رم buffer میکنه مصرف رم خیلی زیادی می تونه در فایل های حجیم داشته باشه.
برای همین اکثراً در کار با فایل های حجیم در PHP پیشنهاد میکنن که به جای file_get_contents از تابع fopen برای ایجاد یک file pointer و سپس از تابع fgets برای خواندن تیکه تیکه فایل (مثلاً خط به خط) استفاده کنن.
چون اینطوری تابع fgets فقط همون مقدار از فایل که نیازه رو تو مموری بافر میکنه و نه ممکنه که اخطار سر ریز بافر در حجم های خیلی بالا پیش بیاد و نه مشکل مصرف بیش از حد رم داره.
نمونه کد در این لینک:
http://stackoverflow.com/questions/1...e-files-in-php که البته طبق گفته این لینک که درست هم هست علاوه بر مشکل سرعت و بافر در حجم های خیلی زیاد ممکنه مشکل Time Out هم پیش بیاد.
همچنین درباره سرعت دیتابیس نسبت به فایل هم پیشنهاد میکنم لینک های زیر رو مطالعه کنید:
http://stackoverflow.com/questions/6...database-speed
http://stackoverflow.com/questions/8...e-access-speed
درسته فایل دسترسی سریع تری داره اما در مقیاس اطلاعاتی خیلی زیاد برای خود مدیر سایت مشکل ساز میشه و حتی بعداً اگه بخواد سایت رو بفروشه نمی تونه.
و باز هم دوستان متخصص 
من نگفتم عدل بیان همینی که من نوشتمو استفاده کنن . این کدی که من نوشتم یه کد مفهومیه فقط دوست عزیز . کاش فرق کد مفهومی و نمونه کد رو میدونستید !!!
درسته فایل دسترسی سریع تری داره اما در مقیاس اطلاعاتی خیلی زیاد برای خود مدیر سایت مشکل ساز میشه و حتی بعداً اگه بخواد سایت رو بفروشه نمی تونه.
دیگه اون بستگی به سلیقه شما داره که چطوری با NoSQL کار کنید . اگر قرار باشه مثل یه برنامه نویس تازه کار همه اطلاعات رو بریزید توی یه فایل با فرمت txt که حتی خروجی فایل رو هم نتونید کنترل کنید که نه تنها تو فروش سایت به مشکل میخورید بلکه هر کی هم رسید میشه هکر و هکتون میکنه . باید اصولی کار بشه .

نوشته اصلی توسط
hoka
به نظر بنده هم همین موضوع هست که کار با یک فایل بسیار بسیار بزرگ در حد 20 گیگ ( حدود 300 میلیون خط ) در یک سرور معمولی بسیار سخت هست . به دو دلیل . اول اینکه شما باید یک فایل رو مدام در حال ادیت قرار بدید ( اگر دیتابیس ایستا باشه مثل تیبل پست های وردپرس مشکلی نیست ) ولی اگر یک دیتابیس با این حجم مدام در حال نوشتن و ویرایش باشه قطعا به مشکل خواهد خورد دقیقا مثل موتور MyISAM که کوئری ها در صف قرار میگیرن
بنده خودم الان سخت به دنبال روشی هستم که سرعت کار با دیتابیسم رو افزایش بده و قطعا فردا دیتابیس رو در یک فایل متنی مثل csv میریزم و تست میکنم . البته که خود phpmyadmin از موتور csv پشتیبانی میکنه ولی هیچ کس توصیه نمیکنه
- - - Updated - - -
البته کوئری زیاد هست ولی بدترین کوئری این کوئری ای که معرفی کردید هست به دلیل اینکه تمام فایل به یکباره در سیستم باز میشه بدون هیچ لیمیتیشنی . حتی دیتابیس رو هم لیمیت قرار میدن براش چه برسه به یک فایل چند ده گیگی . شما از nosql در فایل های چندین گیگی دینامیک استفاده میکنید ؟
شما فرق کد مفهومی و نمونه کد رو میدونید ؟
واقعا هر سری من خواستم تو این انجمن به کسی کمک کنم بعدش اعصاب خوردی بوده برام . مشکل دوستمون حل شد . با تیم ویور نمونه کد براشون نوشتم که کلا مشکلشون حل شد
حالا این وسط یه چیزی واقعا برای من عجیبه . اونموقع که این آقا نیاز داره . هیچ کس وارد تاپیکش نمیشه . دو روز سه روز که گذشت مشکلش که توسط یکی مث من حل شد همه میشن متخصص میریزن داخل تاپیکش و شروع میکنن نظر دادن . مثل سری قبلی که دوستان تفاوت کارل پی اچ پی و زبان کرل رو نمیدونستن . اونوقت میخواستن به من توجیه کنن که کرل یه چیز دیگس 
من خودم تا الان NoSQL که حجم فایل هام بیشتر از 3KB بشه کار نکردم . چون به نظرم اصولی نیست . حتی برای insert کردن در یک تیبل در دیتابیس . ولی خب الان مشکل دوستمون چیز دیگه ایه و نیاز ایشون چیز دیگه
ویرایش توسط phpcoding : March 25th, 2017 در ساعت 05:28
انجام پروژه های:php-c#-c++-java-basic-css-html-javascript-python
مشاوره با مسئول پروژه ها-حامد دعایی:+989901567129
تماس با برنامه نویس-امیرعلی استکی:+989017735378
-
تعداد تشکر ها از phpcoding به دلیل پست مفید