.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "LEI-STORE-FORMAT 5" .TH LEI-STORE-FORMAT 5 1993-10-02 public-inbox.git "public-inbox user manual" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" lei\-store\-format \- قالب ذخیره‌سازی پیام‌ها و پایگاه‌داده lei .SH "توضیحات (DESCRIPTION)" .IX Header "توضیحات (DESCRIPTION)" \&\f(CW\*(C`lei/store\*(C'\fR یک ذخیره‌ساز ترکیبی بر پایه \fBpublic\-inbox\-extindex\-format\fR\|(5) («extindex») همراه با \fBpublic\-inbox\-v2\-format\fR\|(5) («v2») برای ذخیره‌سازی blob است. اگرچه v2 برای بایگانی یک فهرست پستی عمومی منفرد ایده‌آل است؛ اما هرگز برای نامه‌های شخصی یا ذخیره‌سازی چندین blob از یک پیام «یکسان» در نظر گرفته نشده بود. .PP همانند extindex، این بخش می‌تواند سرآیندهای ناهمگون \f(CW\*(C`List\-Id\*(C'\fR متعلق به پیام «یکسان» را با OIDهای متفاوت git blob نمایه کند. برخلاف v2 و extindex، سرآیندهای \f(CW\*(C`Message\-ID\*(C'\fR الزامی نیستند؛ که اجازه می‌دهد پیش‌نویس پیام‌های ارسال‌نشده نیز ذخیره و نمایه‌سازی شوند. .SH "ساختار دایرکتوری (DIRECTORY LAYOUT)" .IX Header "ساختار دایرکتوری (DIRECTORY LAYOUT)" ذخیره‌سازی blob در قالب دوره‌ها (epochs) به سبک v2 وجود دارد. این دوره‌ها در زیر دایرکتوری \f(CW\*(C`local/\*(C'\fR (به جای \f(CW\*(C`git/\*(C'\fR\)) قرار دارند تا از تلقی تصادفی آن‌ها به عنوان یک صندوق ورودی v2 جلوگیری شود. .SS "نمای کلی و تعاریف نمایه (INDEX OVERVIEW AND DEFINITIONS)" .IX Subsection "نمای کلی و تعاریف نمایه (INDEX OVERVIEW AND DEFINITIONS)" .Vb 3 \& $EPOCH \- Integer starting with 0 based on time \& $SCHEMA_VERSION \- DB schema version (for Xapian) \& $SHARD \- Integer starting with 0 based on parallelism \& \& ~/.local/share/lei/store \& \- local/$EPOCH.git # normal bare git repositories \& \- mail_sync.sqlite3 # sync state IMAP, Maildir, NNTP .Ve .PP علاوه بر این، موارد زیر همان نقش‌هایی را دارند که در extindex ایفا می‌کنند: .PP .Vb 5 \& \- ei.lock # lock file to protect global state \& \- ALL.git # empty, alternates for local/*.git \& \- ei$SCHEMA_VERSION/$SHARD # per\-shard Xapian DB \& \- ei$SCHEMA_VERSION/over.sqlite3 # overview DB for WWW, IMAP \& \- ei$SCHEMA_VERSION/misc # misc Xapian DB .Ve .SS "حذف داده‌های تکراری XREF3 (XREF3 DEDUPLICATION)" .IX Subsection "حذف داده‌های تکراری XREF3 (XREF3 DEDUPLICATION)" حذف داده‌های تکراری نمایه از extindex پیروی می‌کند؛ برای اطلاعات بیشتر بخش «XREF3 DEDUPLICATION» را در \fBpublic\-inbox\-extindex\-format\fR\|(5) ببینید. .SS "حذف داده‌های تکراری BLOB (BLOB DEDUPLICATION)" .IX Subsection "حذف داده‌های تکراری BLOB (BLOB DEDUPLICATION)" محتوای مخازن \f(CW\*(C`local/*.git\*(C'\fR بر اساس شناسه‌های شیء blob در گیت (در حال حاضر SHA\-1) حذف تکرار می‌شود. این ویژگی امکان ذخیره چندین نسخه از پیام‌های ارسال‌شده همزمان به چند گروه (cross\-posted) و رونوشت‌شده شخصی (Cc\-ed) را با سرآیندهای متفاوت مانند \f(CW\*(C`Received:\*(C'\fR، \f(CW\*(C`X\-Spam\-Status:\*(C'\fR و موارد مشابه جهت عیب‌یابی فراهم می‌سازد. .SS "فرامداده‌های فرار (VOLATILE METADATA)" .IX Subsection "فرامداده‌های فرار (VOLATILE METADATA)" اطلاعات کلیدواژه‌ها و برچسب‌ها (همان‌طور که در RFC 8621 برای JMAP توصیف شده است) در قطعات (shards) موجود Xapian (\f(CW\*(C`ei$SCHEMA_VERSION/$SHARD\*(C'\fR) ذخیره می‌شوند. امکان جستجوی پیام‌های منطبق با برچسب‌ها و کلیدواژه‌ها به ترتیب با استفاده از \f(CW\*(C`L:\*(C'\fR و \f(CW\*(C`kw:\*(C'\fR وجود دارد. مانند تمامی داده‌های ذخیره‌شده در نمایه‌های Xapian، فرامداده‌های فرار به سند Xapian مرتبط هستند، بنابراین بین blobهای مختلف از یک پیام «یکسان» به اشتراک گذاشته می‌شوند. .SS mail_sync.sqlite3 .IX Subsection "mail_sync.sqlite3" این پایگاه‌داده SQLite برای نگاشت دوطرفه بین blobهای git و شناسه‌های UID در IMAP، نام فایل‌های Maildir و شماره مقالات NNTP نگهداری می‌شود. .PP همچنین برای بازیابی پیام‌ها از Maildirهای نمایه‌شده توسط \&\fBlei\-index\fR\|(1) استفاده می‌شود. .SH "ارتباط بین‌فرایندی (IPC)" .IX Header "ارتباط بین‌فرایندی (IPC)" \&\fBlei\-daemon\fR\|(8) با فرایند \f(CW\*(C`lei/store\*(C'\fR با استفاده از سوکت‌های \&\fBunix\fR\|(7) \f(CW\*(C`SOCK_SEQPACKET\*(C'\fR ارتباط برقرار می‌کند. .SH "هشدارها (CAVEATS)" .IX Header "هشدارها (CAVEATS)" نمایه‌سازی مجدد و همگام‌سازی هنوز پشتیبانی نمی‌شود. .SH "تشکر و قدردانی (THANKS)" .IX Header "تشکر و قدردانی (THANKS)" با تشکر از بنیاد لینوکس (Linux Foundation) به خاطر حمایت مالی از توسعه و آزمایش این پروژه. .SH "حق نشر (COPYRIGHT)" .IX Header "حق نشر (COPYRIGHT)" حق نشر ۲۰۲۱ تمام مشارکت‌کنندگان .PP مجوز: AGPL\-3.0+ .SH "همچنین ببینید (SEE ALSO)" .IX Header "همچنین ببینید (SEE ALSO)" \&\fBpublic\-inbox\-v2\-format\fR\|(5)، \fBpublic\-inbox\-extindex\fR\|(5)