| NCCOPY(1) | UNIDATA UTILITIES | NCCOPY(1) |
نام (NAME)
nccopy - رونوشت از یک فایل netCDF با امکان تغییر قالب، فشردهسازی یا تکهبندی در خروجی
خلاصه دستور (SYNOPSIS)
nccopy [-k kind_name ] [-kind_code] [-d n ] [-s] [-c chunkspec ] [-u] [-w] [-[v|V] var1,...] [-[g|G] grp1,...] [-m bufsize ] [-h chunk_cache ] [-e cache_elems ] [-r] [-F filterspec ] [-L n ] [-M n ] infile outfile
توضیحات (DESCRIPTION)
ابزار nccopy از یک فایل netCDF ورودی با هر نوع قالب پشتیبانیشده، در یک فایل netCDF خروجی رونوشت تهیه میکند و به دلخواه میتواند خروجی را به هر گونه قالب سازگار دیگری از netCDF تبدیل کند، دادهها را فشرده سازد یا مجدداً تکهبندی (rechunk) کند. برای مثال، اگر با کتابخانه netCDF-3 ساخته شده باشد، یک فایل با قالب کلاسیک netCDF را میتوان در یک فایل ۶۴بیتی آفست netCDF رونوشت کرد تا متغیرهای بزرگتر مجاز شوند. اگر با کتابخانه netCDF-4 ساخته شده باشد، یک فایل کلاسیک netCDF میتواند به یک فایل netCDF-4 یا به یک فایل با مدل کلاسیک netCDF-4 نیز رونوشت شود که امکان فشردهسازی دادهها، تغییرات بهینه در ساختار (schema)، اندازههای بزرگتر برای متغیرها، و استفاده از سایر قابلیتهای netCDF-4 را فراهم میسازد.
اگر هیچ قالب خروجی با استفاده از -k kind_name یا -kind_code مشخص نشود، خروجی از همان قالب ورودی استفاده خواهد کرد، مگر اینکه ورودی از نوع کلاسیک یا با آفست ۶۴بیتی باشد و تکهبندی یا فشردهسازی تعیین شده باشد؛ در این حالت قالب خروجی مدل کلاسیک netCDF-4 خواهد بود. تلاش برای برخی از انواع تبدیل قالب، در صورتی که تبدیل امکانپذیر نباشد، منجر به خطا خواهد شد. به عنوان مثال، تلاش برای رونوشت یک فایل netCDF-4 که از ویژگیهای مدل پیشرفته (enhanced model) مانند گروهها یا رشتههای با طول متغیر استفاده میکند، به هر یک از انواع دیگر قالبهای netCDF که از مدل کلاسیک استفاده میکنند، با خطا مواجه خواهد شد.
همچنین nccopy به عنوان نمونهای از یک برنامه همهمنظوره netCDF-4 عمل میکند، زیرا قادر است هر فایل معتبر netCDF را بخواند و گروههای تودرتو، رشتهها و انواع دادههای تعریفشده توسط کاربر (شامل انواع مرکب تودرتوی دلخواه، انواع با طول متغیر و دادههایی از هر نوع معتبر netCDF-4) را مدیریت کند.
اگر هنگام ساخت nccopy پشتیبانی از DAP فعال شده باشد، نام فایل میتواند یک نشانی اینترنتی (URL) از نوع DAP را مشخص کند. از این قابلیت میتوان برای تبدیل دادههای موجود روی کارسازهای DAP به فایلهای محلی netCDF استفاده کرد.
گزینهها (OPTIONS)
- -k kind_name
- استفاده از نام قالب برای تعیین نوع فایلی که قرار است ایجاد شود و به دنبال آن، مدل داده (یعنی netcdf-3 (کلاسیک) یا netcdf-4 (پیشرفته)). آرگومانهای ممکن عبارتند از:
- 'nc3' یا 'classic' => قالب کلاسیک netCDF
- 'nc6' یا '64-bit offset' => قالب ۶۴بیتی netCDF
- 'nc4' یا 'netCDF-4' => قالب netCDF-4 (مدل داده پیشرفته)
- 'nc7' یا 'netCDF-4 classic model' => قالب مدل کلاسیک netCDF-4
- نکته: شمارههای قالب قدیمی '1'، '2'، '3'، '4' که به ترتیب معادل نامهای قالب 'nc3'، 'nc6'، 'nc4' یا 'nc7' هستند نیز همچنان پذیرفته میشوند اما منسوخ شدهاند، زیرا ممکن است به آسانی میان شمارههای قالب و نامهای قالب سردرگمی ایجاد شود.
- [-kind_code]
- استفاده از کد عددی قالب (به جای نام قالب) برای تعیین نوع فایلی که قرار است ایجاد شود و به دنبال آن، مدل داده (یعنی netcdf-3 (کلاسیک) در برابر netcdf-4 (پیشرفته)). کدهای عددی عبارتند از:
- 3 => قالب کلاسیک netcdf
- 6 => قالب ۶۴بیتی netCDF
- 4 => قالب netCDF-4 (مدل داده پیشرفته)
- 7 => قالب مدل کلاسیک netCDF-4
کد عددی «7» به این دلیل استفاده میشود که «7=3+4» است؛ که قالبی را مشخص میکند که از مدل داده netCDF-3 برای سازگاری و از قالب ذخیرهسازی netCDF-4 برای کارایی استفاده میکند. حق امتیاز استفاده از این کدهای عددی به جای شمارههای قالب قدیمی و گیجکننده به NCO تعلق دارد.
- -d n
- برای خروجی netCDF-4، از جمله مدل کلاسیک netCDF-4، سطح deflation (سطح فشردهسازی) را برای خروجی دادههای متغیر مشخص میکند. 0 نشاندهنده عدم فشردهسازی و 9 نشاندهنده حداکثر فشردهسازی است، که در سطوح بالاتر فشردهسازی، زمان لازم برای فشردهسازی یا بازکردن دادهها اندکی بیشتر از سطوح پایینتر است. به عنوان یک اثر جانبی، تعیین سطح فشردهسازی 0 (از طریق «-d 0») در واقع قابلیت فشردهسازی را به طور کامل خاموش میکند. فشردهسازی حاصل همچنین ممکن است به پارامترهای تکهبندی (chunking) خروجی بستگی داشته باشد. اگر این گزینه برای یک فایل ورودی با قالب کلاسیک یا قالب با آفست ۶۴بیتی مشخص شود، نیازی نیست که مدل کلاسیک netCDF-4 بودن خروجی نیز تصریح شود، زیرا آن حالت پیشفرض خواهد بود. اگر این گزینه مشخص نشود و فایل ورودی حاوی متغیرهای فشردهشده باشد، فشردهسازی در خروجی همچنان حفظ خواهد شد و به طور پیشفرض از همان تکهبندی موجود در ورودی استفاده میشود.
- توجه داشته باشید که nccopy مستلزم آن است که همه متغیرها با استفاده از یک سطح فشردهسازی یکسان فشرده شوند، اما واسط برنامهنویسی (API) چنین محدودیتی ندارد. با استفاده از یک برنامه میتوانید فشردهسازی را برای هر متغیر به طور مستقل سفارشیسازی کنید.
- -s
- برای خروجی netCDF-4، از جمله مدل کلاسیک netCDF-4، درهمآمیزی (shuffling) بایتهای داده متغیر را پیش از فشردهسازی یا پس از بازکردن دادهها مشخص میکند. درهمآمیزی به جابجایی متناوب بایتها در یک قطعه اشاره دارد به طوری که اولین بایتهای تمام مقادیر در ذخیرهسازی پیوسته باشند، به دنبال آن تمام بایتهای دوم و به همین ترتیب، که اغلب باعث بهبود فشردهسازی میشود. این گزینه نادیده گرفته میشود مگر اینکه سطح فشردهسازی غیرصفر تعیین شده باشد. استفاده از -d0 برای تعیین عدم فشردهسازی روی دادههای ورودی که فشرده و درهمآمیخته شدهاند، هم فشردهسازی و هم درهمآمیزی را در خروجی غیرفعال میکند.
- -u
- تبدیل هر بُعد با اندازه نامحدود (unlimited) در ورودی به ابعاد با اندازه ثابت در خروجی. این امر میتواند دسترسی متغیر-به-متغیر (variable-at-a-time) را تسریع کند، اما دسترسی رکورد-به-رکورد (record-at-a-time) به چندین متغیر در راستای یک بُعد نامحدود را کندتر میسازد.
- -w
- نگهداشتن خروجی در حافظه (به عنوان یک فایل netCDF بدون دیسک) تا زمان بسته شدن خروجی، که در آن زمان فایل خروجی روی دیسک نوشته میشود. این کار میتواند سرعت عملیاتی مانند تبدیل بُعد نامحدود به اندازه ثابت (گزینه -u)، تکهبندی، تکهبندی مجدد یا فشردهسازی ورودی را بسیار افزایش دهد. این امر مستلزم آن است که حافظه موجود برای نگهداری فایل خروجی به اندازه کافی بزرگ باشد. این گزینه ممکن است سرعت بیشتری نسبت به تنظیم دقیق گزینههای -m، -h یا -e فراهم آورد، و قطعاً بسیار سادهتر است.
- -c chunkspec
- برای خروجی netCDF-4، از جمله مدل کلاسیک netCDF-4، تکهبندی (tiling چندبُعدی) را برای دادههای متغیر در خروجی تعیین میکند. این گزینه برای مشخص کردن واحدهای دسترسی به دیسک، فشردهسازی، یا سایر فیلترها مانند چکسامها مفید است. تغییر تکهبندی در یک فایل netCDF همچنین میتواند با انتخاب شکلهای تکهای که برای رایجترین الگوهای دسترسی مناسب هستند، سرعت دسترسی را تا حد زیادی افزایش دهد.
- آرگومان chunkspec اشکال مختلفی دارد. شکل اول، شکل اصلی و منسوخشده است که رشتهای از انتسابهای جداشده با کاما است که هر کدام نام یک بُعد، یک نویسه '/'، و در صورت تمایل طول تکه متناظر برای آن بُعد را مشخص میکنند. هیچ فاصلهای نباید در رشته chunkspec وجود داشته باشد، مگر فاصلههای گریزدار (escaped) که بخشی از نام یک بُعد باشند. یک chunkspec حداقل یک بُعد را نام میبرد و ممکن است ابعادی را که قرار نیست تکهبندی شوند یا طول تکه پیشفرض برای آنها مطلوب است نادیده بگیرد. اگر نام یک بُعد با نویسه '/' دنبال شود اما طول تکهای پس از آن نیاید، طول واقعی بُعد در نظر گرفته میشود. در صورت رونوشت یک فایل با مدل کلاسیک به یک فایل خروجی netCDF-4 و عدم ذکر نام همه ابعاد در chunkspec، ابعاد نامگذارینشده نیز از طول واقعی بُعد برای طول تکه استفاده خواهند کرد. یک مثال از chunkspec برای متغیرهایی که از ابعاد 'm' و 'n' استفاده میکنند میتواند 'm/100,n/200' باشد تا تکههای ۱۰۰ در ۲۰۰ را مشخص کند. برای مشاهده تکهبندی حاصل از رونوشت با یک chunkspec، از گزینه '-s' دستور ncdump روی فایل خروجی استفاده کنید.
- مقدار '/' برای chunkspec که تمام نامهای ابعاد و طولهای تکه متناظر را حذف میکند، مشخص میسازد که هیچ تکهبندیای نباید در خروجی رخ دهد، بنابراین میتواند برای حذف تکهبندی تمام متغیرهای تکهبندیشده استفاده شود. برای مشاهده تکهبندی حاصل از رونوشت با یک chunkspec، از گزینه '-s' در دستور ncdump روی فایل خروجی استفاده کنید.
- به عنوان یک بهینهسازی ورودی/خروجی (I/O)، ابزار nccopy آستانهای برای حداقل اندازه متغیرهای غیررکوردی که تکهبندی میشوند دارد که در حال حاضر ۸۱۹۲ بایت است. پرچم -M میتواند برای بازنویسی این مقدار استفاده شود.
- توجه داشته باشید که nccopy مستلزم آن است که متغیرهایی که در یک بُعد مشترک هستند، در اندازه تکه مرتبط با آن بُعد نیز مشترک باشند، اما واسط برنامهنویسی چنین محدودیتی ندارد. اگر نیاز دارید که تکهبندی را برای متغیرها به طور مستقل سفارشیسازی کنید، باید از شکل دوم chunkspec استفاده کنید. این شکل دوم chunkspec دارای این ساختار نحوی است: var:n1,n2,...,nn . این ساختار فرض میکند که متغیر با نام "var" دارای مرتبه n است. تکهبندی اعمالشده روی هر بُعد متغیر با مقادیر n1 تا nn مشخص میشود. این شکل دوم مشخصات تکهبندی میتواند چندین بار تکرار شود تا تکهبندی دقیق متغیرهای مختلف تعیین گردد. اگر متغیر مشخص شود اما اندازه تکهای برای آن تعیین نشود (یعنی -c var: )، در این صورت تکهبندی برای آن متغیر غیرفعال میشود. اگر همان متغیر بیش از یک بار مشخص شود، مشخصات دوم و بعدی نادیده گرفته میشوند. همچنین، این شکل دوم یعنی تکهبندی به ازای متغیر، بر هر گونه تکهبندی به ازای بُعد، به جز حالت تک "/"، اولویت دارد..IP شکل سوم chunkspec دارای ساختار زیر است: var:compact یا var:contiguous. این حالت صراحتاً تلاش میکند نوع ذخیرهسازی متغیر را بهترتیب روی compact (فشرده) یا contiguous (پیوسته) تنظیم کند. این موارد در صورتی که سایر پرچمها نیازمند قطعهبندی (chunked شدن) متغیر باشند ممکن است نادیده گرفته شوند.
- -v var1,...
- خروجی افزون بر اعلانهای تمامی ابعاد، متغیرها و مشخصهها (attributes)، مقادیر دادههای متغیرهای مشخصشده را در بر خواهد داشت. یک یا چند متغیر باید بر پایهٔ نام در فهرست جداشده با کاما به دنبال این گزینه مشخص شوند. این فهرست باید یک آرگومان منفرد به دستور باشد، بنابراین نمیتواند شامل فاصلههای خالی گریز دادهنشده (unescaped) یا دیگر نویسههای فضای خالی باشد. متغیرهای نامبرده باید متغیرهای netCDF معتبری در فایل ورودی (input-file) باشند. یک متغیر درون یک گروه در یک فایل netCDF-4 میتواند با یک نام مسیر مطلق مانند “/GroupA/GroupA2/var” مشخص شود. استفاده از یک نام مسیر نسبی مانند 'var' یا “grp/var” تمامی نامهای متغیر منطبق در فایل را تعیین میکند. حالت پیشفرض بدون این گزینه، درج مقادیر دادهها برای همهٔ متغیرها در خروجی است.
- -V var1,...
- خروجی تنها شامل متغیرهای مشخصشده خواهد بود، اما تمامی ابعاد و مشخصههای سراسری یا گروهی را در بر میگیرد. یک یا چند متغیر باید بر پایهٔ نام در فهرست جداشده با کاما در ادامهٔ این گزینه تعیین شوند. این فهرست باید یک تکآرگومان به دستور باشد، بنابراین نمیتواند شامل فاصلههای خالی بدون گریز یا دیگر نویسههای فضای خالی باشد. متغیرهای نامبرده باید متغیرهای netCDF معتبر در فایل ورودی باشند. یک متغیر درون یک گروه در فایل netCDF-4 میتواند با نام مسیر مطلق، مانند '/GroupA/GroupA2/var' مشخص شود. استفاده از یک نام مسیر نسبی مانند 'var' یا 'grp/var' همهٔ متغیرهای منطبق در فایل را مشخص میکند. حالت پیشفرض بدون این گزینه، شامل کردن همهٔ متغیرها در خروجی است.
- -g grp1,...
- خروجی، مقادیر دادهها را تنها برای گروههای مشخصشده در بر خواهد گرفت. یک یا چند گروه باید با نام در فهرستی جداشده با کاما پس از این گزینه مشخص شوند. این فهرست باید یک تکآرگومان برای دستور باشد. گروههای نامبرده باید گروههای netCDF معتبر در فایل ورودی باشند. پیشفرض، بدون این گزینه، درج مقادیر دادهها برای همهٔ گروهها در خروجی است.
- -G grp1,...
- خروجی تنها گروههای مشخصشده را شامل خواهد شد. یک یا چند گروه باید با نام در فهرستی جداشده با کاما در ادامهٔ این گزینه تعیین شوند. این فهرست باید یک تکآرگومان به دستور باشد. گروههای نامبرده باید گروههای netCDF معتبر در فایل ورودی باشند. حالت پیشفرض بدون این گزینه، شامل کردن تمامی گروهها در خروجی است.
- -m bufsize
- یک عدد صحیح یا اعشاری که اندازهٔ بافر رونوشت مورد استفاده برای رونوشت متغیرهای بزرگ را به بایت مشخص میکند. پسوندهای K، M، G یا T اندازهٔ بافر رونوشت را بهترتیب در یک هزار، یک میلیون، یک میلیارد یا یک تریلیون ضرب میکنند. مقدار پیشفرض ۵ مگابایت (5 Mbytes) است، اما در صورت نیاز افزایش مییابد تا دستکم گنجایش یک قطعه (chunk) از متغیرهای قطعهبندیشدهٔ netCDF-4 در فایل ورودی را داشته باشد. ممکن است بخواهید برای رونوشت فایلهای بزرگ بر روی شبکههای با تأخیر زیاد (high latency)، مقداری بیشتر از پیشفرض مشخص کنید. در صورتی که خروجی در حافظه جا شود، استفاده از گزینهٔ '-w' ممکن است کارایی بهتری را ارائه دهد.
- -h chunk_cache
- برای خروجی netCDF-4، از جمله مدل کلاسیک netCDF-4، یک عدد صحیح یا اعشاری است که اندازهٔ حافظهٔ نهان قطعه (chunk cache) تخصیصیافته به هر متغیر قطعهبندیشده را به بایت مشخص میکند. این یک ویژگی از فایل نیست، بلکه صرفاً پارامتری برای تنظیم کارایی بهمنظور جلوگیری از فشردهسازی یا وافشردگی چندبارهٔ دادههای یکسان هنگام رونوشت و تغییر شکل قطعههاست. پسوند K، M، G یا T اندازهٔ حافظهٔ نهان قطعه را بهترتیب در یک هزار، یک میلیون، یک میلیارد یا یک تریلیون ضرب میکند. مقدار پیشفرض ۴٫۱۹۴۳۰۴ مگابایت (یا هر مقداری که برای ثابت زمان پیکربندی CHUNK_CACHE_SIZE هنگام ساخت کتابخانهٔ netCDF مشخص شده) است. در حالت ایدهآل، ابزار nccopy باید تنها یک اندازهٔ بافر حافظه را بپذیرد و آن را بهطور بهینه بین بافر رونوشت و حافظهٔ نهان قطعه تقسیم کند، اما تاکنون هیچ الگوریتم عمومی برای محاسبهٔ اندازهٔ بهینهٔ حافظهٔ نهان قطعه پیادهسازی نشده است. استفاده از گزینهٔ '-w'، در صورتی که خروجی در حافظه جا شود، ممکن است کارایی بهتری فراهم کند.
- -e cache_elems
- برای خروجی netCDF-4، از جمله مدل کلاسیک netCDF-4، تعداد قطعاتی را مشخص میکند که حافظهٔ نهان قطعه میتواند در خود نگه دارد. پسوند K، M، G یا T تعداد قطعات قابل نگهداری در حافظهٔ نهان را بهترتیب در یک هزار، یک میلیون، یک میلیارد یا یک تریلیون ضرب میکند. این یک ویژگی از فایل نیست، بلکه صرفاً پارامتری برای تنظیم کارایی بهمنظور جلوگیری از فشردهسازی یا وافشردگی چندبارهٔ دادههای یکسان حین رونوشت و تغییر ابعاد قطعههاست. مقدار پیشفرض ۱۰۰۹ است (یا هر مقداری که برای ثابت زمان پیکربندی CHUNK_CACHE_NELEMS هنگام ساخت کتابخانهٔ netCDF مشخص شده است). در حالت ایدهآل، ابزار nccopy باید مقدار بهینهای را برای این پارامتر تعیین کند، اما هنوز هیچ الگوریتم عمومی برای محاسبهٔ تعداد بهینهٔ عناصر حافظهٔ نهان قطعه پیادهسازی نشده است.
- -r
- فایل ورودی با فرمت netCDF کلاسیک یا 64-bit offset را پیش از رونوشت، درون یک فایل netCDF بدون دیسک در حافظه میخواند. نیازمند آن است که فایل ورودی به اندازهٔ کافی برای جا شدن در حافظه کوچک باشد. به نظر نمیرسد این مورد برای nccopy افزایش سرعت چشمگیری ایجاد کند، بنابراین ممکن است گزینهٔ چندان مفیدی نباشد.
- -L n
- تنظیم سطح ثبت وقایع (log level)؛ فقط در صورتی قابل استفاده است که nccopy از netCDF-4 (ارتقایافته/enhanced) پشتیبانی کند.
- -M n
- تنظیم حداقل اندازهٔ قطعه (chunk)؛ فقط در صورتی قابل استفاده است که nccopy از netCDF-4 (ارتقایافته/enhanced) پشتیبانی کند.
- -F filterspec
- برای خروجی netCDF-4، از جمله مدل کلاسیک netCDF-4، فیلتری را برای اعمال روی مجموعهٔ مشخصی از متغیرها در خروجی تعیین میکند. معمولاً فیلتر یک الگوریتم فشردهسازی/وافشردگی با یک شناسهٔ عددی یکتا است که توسط HDF Group تخصیص یافته است (نگاه کنید به https://support.hdfgroup.org/services/filters.html).
- آرگومان filterspec دارای این ساختار کلی است:
- شناسهٔ فیلتر (filterid) یک عدد صحیح مثبت بدون علامت است که شناسهٔ تخصیصیافته توسط HDFgroup به فیلتر را نشان میدهد. به دنبال این شناسه، توالیای از پارامترها میآید که نحوهٔ عملکرد فیلتر را تعریف میکنند. هر پارامتر یک عدد صحیح ۳۲ بیتی بدون علامت است.
- این پارامتر ممکن است چندین بار با نامهای مختلف متغیر تکرار شود..SH "مثالها (EXAMPLES)"
تهیه یک رونوشت از foo1.nc، یک فایل netCDF از هر نوع، به foo2.nc، یک فایل netCDF از همان نوع:
nccopy foo1.nc foo2.nc
توجه داشته باشید که رونوشت فوق به سرعت استفاده از cp یا سایر ابزارهای سادهٔ رونوشتبرداری نخواهد بود، زیرا فایل تنها با استفاده از netCDF API کپی میشود. اگر فایل ورودی بایتهای اضافی پس از پایان دادههای netCDF داشته باشد، آنها رونوشت نخواهند شد، زیرا از طریق رابط netCDF در دسترس نیستند. اگر فایل اصلی در حالت «No fill» ایجاد شده باشد به گونهای که مقادیر پرکننده (fill values) برای فاصلهگذاری جهت همترازی دادهها ذخیره نشده باشند، فایل خروجی ممکن است بایتهای فاصلهگذاری متفاوتی داشته باشد.
تبدیل یک فایل مدل کلاسیک netCDF-4 به نام compressed.nc که از فشردهسازی استفاده میکند، به یک فایل netCDF-3 به نام classic.nc:
nccopy -k classic compressed.nc classic.nc
توجه داشته باشید که میتوانست بهجای 'classic' از 'nc3' استفاده شود.
بارگیری متغیر 'time_bnds' و مشخصههای مرتبط با آن از یک سرور OPeNDAP و رونوشت نتیجه در یک فایل netCDF به نام 'tb.nc':
توجه داشته باشید نشانیهای وب (URLs) که متغیرهای خاصی را به عنوان آرگومانهای خط فرمان مشخص میکنند، عموماً باید درون علامت نقلقول قرار گیرند تا از تفسیر نویسههای ویژه مانند «?» توسط پوسته (shell) جلوگیری شود.
فشردهسازی تمام متغیرها در فایل ورودی foo.nc (یک فایل netCDF از هر نوع) در فایل خروجی bar.nc:
nccopy -d1 foo.nc bar.nc
اگر foo.nc یک فایل netCDF از نوع classic یا 64-bit offset باشد، bar.nc یک فایل netCDF مدل کلاسیک netCDF-4 خواهد بود، زیرا نسخههای ساختار classic و 64-bit offset از فشردهسازی پشتیبانی نمیکنند. اگر foo.nc یک فایل netCDF-4 با متغیرهایی فشردهشده با سطوح مختلف deflation باشد، خروجی نیز یک فایل netCDF-4 از همان نوع خواهد بود، اما همه متغیرها، از جمله هر متغیر فشردهنشده در ورودی، اکنون از سطح فشردهسازی (deflation level) ۱ استفاده خواهند کرد.
فرض کنید دادههای ورودی شامل متغیرهای شبکهبندیشدهای هستند که از ابعاد time ،lat و lon با ۱۰۰۰ زمان در ۱۰۰۰ عرض جغرافیایی در ۱۰۰۰ طول جغرافیایی استفاده میکنند و بُعد time کندترین تغییرات را دارد. همچنین فرض کنید کاربران دسترسی سریع به دادهها در همهٔ زمانها را برای مجموعهٔ کوچکی از نقاط lat-lon میخواهند. دسترسی به دادهها برای ۱۰۰۰ زمان معمولاً مستلزم دسترسی به ۱۰۰۰ بلوک دیسک است که میتواند کُند باشد.
سازماندهی مجدد دادهها به تکهها (chunks) روی دیسک به طوری که هر تکه شامل تمام زمانها برای تعداد کمی از مختصاتهای lat و lon باشد، چنین دسترسی را به طور چشمگیری سرعت میبخشد. برای تکهبندی دادهها در فایل ورودی slow.nc (یک فایل netCDF از هر نوع) در فایل خروجی fast.nc، میتوانید استفاده کنید از:
nccopy -c time/1000,lat/40,lon/40 slow.nc fast.nc
برای مشخص کردن تکههای دادهای شامل ۱۰۰۰ زمان، ۴۰ عرض جغرافیایی و ۴۰ طول جغرافیایی. اگر حافظه کافی برای نگهداری فایل خروجی داشتید، میتوانید با ایجاد خروجی در حافظه پیش از نوشتن آن روی دیسک هنگام بستن (با استفاده از پرچم -w)، عملیات تکهبندی مجدد (rechunking) را به طور چشمگیری سرعت بخشید:
nccopy -w -c time/1000,lat/40,lon/40 slow.nc fast.nc
nccopy -c time:1000 -c lat:40 -c lon:40 slow.nc fast.nc
مجموعه کامل قوانین تکهبندی در اینجا آورده شده است. بهصورت خلاصهای کلی، این قوانین تمام ویژگیهای تکهبندی فایل ورودی را حفظ میکنند. این قوانین فقط زمانی اعمال میشوند که قالب خروجی انتخابشده از تکهبندی پشتیبانی کند، یعنی برای گونههای netcdf-4.
مشخصات تکهبندی مختص هر متغیر باید آشکار باشد و مستقیماً به فراخوانی API متناظر “nc_def_var_chunking” ترجمه میشود.
مشخصات تکهبندی اولیه به ازای هر بُعد، نیازمند مقداری تفسیر توسط nccopy است. قوانین زیر با ترتیب مشخصشده بهطور مستقل برای هر متغیری که قرار است از ورودی به خروجی رونوشت شود اعمال میگردند. این قوانین با این فرض نوشته شدهاند که در حال تعیین تکهبندی برای متغیر خروجی مفروض Vout هستیم که از متغیر ورودی Vin حاصل میشود.
- 1.
- اگر هیچ گزینه '-c' که به یک متغیر اعمال شود وجود نداشته باشد و متغیر ورودی متناظر پیوسته باشد، یا ورودی گونهای از netcdf-3 باشد، به کتابخانه netcdf-c اجازه داده میشود تمام تصمیمات مربوط به تکهبندی را اتخاذ کند.
- 2.
- برای هر بُعد از Vout که صراحتاً در خط فرمان (با استفاده از گزینه '-c') مشخص شده باشد، مقدار تکهبندی برای آن بُعد بدون در نظر گرفتن قالب یا ویژگیهای ورودی اعمال میشود.
- 3.
- برای ابعادی از Vout که در خط فرمان در گزینه '-c' نام برده نشدهاند، در صورتی که متغیر ورودی متناظر تکهبندی شده باشد، اندازه تکهها از آن حفظ میشود.
- 4.
- اگر Vin پیوسته باشد و هیچیک از ابعاد آن در خط فرمان نام برده نشده باشند، و تکهبندی توسط گزینههای دیگر اجباری نشده باشد، Vout بهصورت پیوسته در نظر گرفته میشود.
- 5.
- اگر متغیر ورودی پیوسته باشد (یا گونهای از netcdf-3 باشد) و گزینهای مبنی بر الزام تکهبندی وجود نداشته باشد، یا حالت ویژه '/' برای گزینه '-c' مشخص شده باشد، متغیر خروجی V بهعنوان پیوسته علامتگذاری میشود.
- 6.
- حالت نهایی و پیشفرض: بخشی یا تمام اندازههای تکه توسط خط فرمان یا متغیر ورودی تعیین نشده باشند. این شامل موارد ورودی غیرتکهای مانند netcdf-3، cdf5 و DAP میشود. در این موارد، تمام اندازههای تکه تعیینشده توسط قوانین قبلی حفظ میشوند و از اندازه کامل بُعد بهعنوان پیشفرض استفاده میشود. استثنا ابعاد نامحدود است که پیشفرض برای آنها ۴ مگابایت میباشد.
همچنین ببینید (SEE ALSO)
ncdump(1),ncgen(1),netcdf(3)
| 2012-03-08 | Release 4.2 |