تحسين أداء المثيل (المواضيع الرئيسية، حجم قاعدة البيانات، والحمولة القصوى)

Hi Discourse Community!

Recently I have been trying to improve the performance of my Discourse installation and clean up a little since my site has been growing exponentially lately.

I have identified two issues, searched about them here but I don’t see a clear answer for some specifics, so I hope that this doesn’t represent much of a bother to anyone.

The first issue I have is the DB Size, which is pretty big. I’m running a 4GB Mem/80GB Disk instance on Digital Ocean and the DB is choking the disk size already. I do believe that eventually I will have to move it (if so, how?) but maybe I’m doing something wrong, following Sam’s Help I exported the following to make it easier:


table_name                  | row_estimate | table_size | index_size | total_size
--------------------------------------------------------------------------
post_timings                | 155307152    | 8004 MB    | 16 GB      | 24 GB
posts                       | 2257277      | 2432 MB    | 4810 MB    | 7242 MB
post_search_data            | 2279749      | 1992 MB    | 769 MB     | 2761 MB
user_actions                | 6549714      | 570 MB     | 2189 MB    | 2759 MB
topic_views                 | 8843734      | 444 MB     | 1494 MB    | 1937 MB
user_visits                 | 569317       | 33 MB      | 1892 MB    | 1925 MB
notifications               | 1482664      | 465 MB     | 914 MB     | 1379 MB
topic_users                 | 4821392      | 500 MB     | 449 MB     | 949 MB
top_topics                  | 47437        | 28 MB      | 773 MB     | 802 MB
user_auth_token_logs        | 1690555      | 515 MB     | 133 MB     | 648 MB
post_actions                | 1610428      | 145 MB     | 367 MB     | 512 MB
post_revisions              | 113187       | 396 MB     | 9312 kB    | 406 MB
topic_links                 | 605525       | 135 MB     | 254 MB     | 389 MB
topics                      | 56970        | 104 MB     | 227 MB     | 331 MB
web_hook_events             | 107760       | 295 MB     | 10 MB      | 306 MB
post_stats                  | 1955191      | 151 MB     | 97 MB      | 248 MB
directory_items             | 13026        | 1312 kB    | 157 MB     | 158 MB
incoming_links              | 812553       | 73 MB      | 82 MB      | 155 MB
post_replies                | 1111686      | 69 MB      | 71 MB      | 139 MB
topic_link_clicks           | 806821       | 54 MB      | 43 MB      | 97 MB
draft_sequences             | 654989       | 36 MB      | 48 MB      | 84 MB
topic_search_data           | 54056        | 40 MB      | 24 MB      | 65 MB
stylesheet_cache            | 901          | 57 MB      | 200 kB     | 57 MB
user_profile_views          | 204427       | 15 MB      | 30 MB      | 46 MB
quoted_posts                | 223337       | 18 MB      | 23 MB      | 41 MB
poll_votes                  | 142349       | 13 MB      | 20 MB      | 32 MB
users                       | 2211         | 2360 kB    | 29 MB      | 32 MB
given_daily_likes           | 252806       | 12 MB      | 16 MB      | 28 MB
scheduler_stats             | 115081       | 17 MB      | 4736 kB    | 21 MB
user_histories              | 30331        | 8848 kB    | 10040 kB   | 18 MB
reviewables                 | 16263        | 10032 kB   | 8344 kB    | 18 MB
optimized_images            | 34463        | 8088 kB    | 10 MB      | 18 MB
post_uploads                | 73123        | 4104 kB    | 13 MB      | 17 MB
uploads                     | 18897        | 5088 kB    | 9080 kB    | 14 MB
email_logs                  | 23224        | 4024 kB    | 9960 kB    | 14 MB
post_custom_fields          | 11043        | 3192 kB    | 9328 kB    | 12 MB
search_logs                 | 68429        | 7480 kB    | 4776 kB    | 12 MB
user_badges                 | 37176        | 2920 kB    | 5008 kB    | 7928 kB
unsubscribe_keys            | 14820        | 3352 kB    | 4480 kB    | 7832 kB
user_auth_tokens            | 5328         | 2536 kB    | 3608 kB    | 6144 kB
reviewable_scores           | 14681        | 3144 kB    | 2768 kB    | 5912 kB
reviewable_histories        | 31482        | 2976 kB    | 2616 kB    | 5592 kB
poll_options                | 20886        | 2560 kB    | 2552 kB    | 5112 kB
skipped_email_logs          | 11164        | 2528 kB    | 2328 kB    | 4856 kB
topic_allowed_users         | 21933        | 1424 kB    | 1872 kB    | 3296 kB
user_uploads                | 19038        | 1040 kB    | 1688 kB    | 2728 kB
user_stats                  | 2211         | 1888 kB    | 160 kB     | 2048 kB
drafts                      | 1324         | 1424 kB    | 368 kB     | 1792 kB
user_custom_fields          | 7467         | 688 kB     | 1064 kB    | 1752 kB
application_requests        | 11244        | 792 kB     | 528 kB     | 1320 kB
topic_tags                  | 10257        | 696 kB     | 528 kB     | 1224 kB
user_associated_accounts    | 670          | 1032 kB    | 184 kB     | 1216 kB
user_profiles               | 2211         | 424 kB     | 720 kB     | 1144 kB
email_tokens                | 3439         | 480 kB     | 528 kB     | 1008 kB
polls                       | 4030         | 520 kB     | 408 kB     | 928 kB
user_search_data            | 2215         | 376 kB     | 520 kB     | 896 kB
topic_custom_fields         | 2738         | 280 kB     | 568 kB     | 848 kB
group_users                 | 4364         | 344 kB     | 448 kB     | 792 kB
plugin_store_rows           | 2090         | 488 kB     | 296 kB     | 784 kB
incoming_referers           | 3779         | 352 kB     | 424 kB     | 776 kB
user_avatars                | 2210         | 208 kB     | 560 kB     | 768 kB
web_crawler_requests        | 1389         | 264 kB     | 440 kB     | 704 kB
group_histories             | 2210         | 272 kB     | 416 kB     | 688 kB
user_emails                 | 2218         | 224 kB     | 376 kB     | 600 kB
user_archived_messages      | 3019         | 240 kB     | 232 kB     | 472 kB
user_options                | 2218         | 384 kB     | 72 kB      | 456 kB
topic_allowed_groups        | 2098         | 128 kB     | 216 kB     | 344 kB
schema_migration_details    | 994          | 192 kB     | 88 kB      | 280 kB
group_mentions              | 933          | 104 kB     | 152 kB     | 256 kB
categories                  | 23           | 96 kB      | 112 kB     | 208 kB
google_user_infos           | 314          | 136 kB     | 72 kB      | 208 kB
theme_fields                | 24           | 168 kB     | 32 kB      | 200 kB
category_users              | 569          | 64 kB      | 136 kB     | 200 kB
javascript_caches           | 8            | 112 kB     | 64 kB      | 176 kB
incoming_domains            | 701          | 80 kB      | 96 kB      | 176 kB
groups                      | 51           | 120 kB     | 48 kB      | 168 kB
category_tag_stats          | 173          | 48 kB      | 104 kB     | 152 kB
tag_search_data             | 109          | 64 kB      | 72 kB      | 136 kB
schema_migrations           | 994          | 88 kB      | 48 kB      | 136 kB
topic_embeds                | 218          | 80 kB      | 56 kB      | 136 kB
badges                      | 51           | 80 kB      | 48 kB      | 128 kB
translation_overrides       | 170          | 72 kB      | 48 kB      | 120 kB
invites                     | 21           | 56 kB      | 64 kB      | 120 kB
user_api_keys               | 4            | 48 kB      | 64 kB      | 112 kB
category_search_data        | 20           | 48 kB      | 64 kB      | 112 kB
tags                        | 109          | 56 kB      | 48 kB      | 104 kB
screened_ip_addresses       | 9            | 48 kB      | 48 kB      | 96 kB
user_second_factors         | 26           | 48 kB      | 48 kB      | 96 kB
oauth2_user_infos           | 4            | 48 kB      | 48 kB      | 96 kB
site_settings               | 165          | 64 kB      | 32 kB      | 96 kB
api_keys                    | 1            | 48 kB      | 48 kB      | 96 kB
category_featured_topics    | 123          | 48 kB      | 48 kB      | 96 kB
screened_emails             | 4            | 48 kB      | 48 kB      | 96 kB
screened_urls               | 1            | 48 kB      | 48 kB      | 96 kB
topic_groups                | 245          | 56 kB      | 32 kB      | 88 kB
muted_users                 | 103          | 40 kB      | 48 kB      | 88 kB
tag_group_permissions       | 11           | 40 kB      | 48 kB      | 88 kB
tag_users                   | 8            | 40 kB      | 48 kB      | 88 kB
child_themes                | 6            | 40 kB      | 48 kB      | 88 kB
category_tags               | 9            | 40 kB      | 48 kB      | 88 kB
topic_timers                | 15           | 40 kB      | 48 kB      | 88 kB
ignored_users               | 10           | 40 kB      | 48 kB      | 88 kB
group_requests              | 0            | 24 kB      | 64 kB      | 88 kB
user_warnings               | 7            | 40 kB      | 48 kB      | 88 kB
email_change_requests       | 64           | 56 kB      | 32 kB      | 88 kB
web_hooks                   | 1            | 72 kB      | 16 kB      | 88 kB
custom_emojis               | 132          | 56 kB      | 32 kB      | 88 kB
color_scheme_colors         | 110          | 56 kB      | 32 kB      | 88 kB
tag_group_memberships       | 192          | 48 kB      | 32 kB      | 80 kB
category_custom_fields      | 17           | 48 kB      | 32 kB      | 80 kB
themes                      | 10           | 48 kB      | 32 kB      | 80 kB
badge_types                 | 3            | 48 kB      | 32 kB      | 80 kB
onceoff_logs                | 39           | 48 kB      | 32 kB      | 80 kB
category_tag_groups         | 8            | 40 kB      | 32 kB      | 72 kB
group_archived_messages     | 56           | 40 kB      | 32 kB      | 72 kB
category_groups             | 3            | 40 kB      | 32 kB      | 72 kB
push_subscriptions          | 12           | 48 kB      | 16 kB      | 64 kB
tag_groups                  | 10           | 48 kB      | 16 kB      | 64 kB
theme_settings              | 6            | 48 kB      | 16 kB      | 64 kB
ar_internal_metadata        | 1            | 48 kB      | 16 kB      | 64 kB
backup_metadata             | 6            | 48 kB      | 16 kB      | 64 kB
user_fields                 | 9            | 48 kB      | 16 kB      | 64 kB
remote_themes               | 7            | 48 kB      | 16 kB      | 64 kB
badge_groupings             | 5            | 48 kB      | 16 kB      | 64 kB
web_hook_event_types        | 10           | 48 kB      | 16 kB      | 64 kB
user_security_keys          | 0            | 8192 bytes | 56 kB      | 64 kB
color_schemes               | 11           | 48 kB      | 16 kB      | 64 kB
permalinks                  | 0            | 24 kB      | 32 kB      | 56 kB
incoming_emails             | 0            | 8192 bytes | 48 kB      | 56 kB
post_action_types           | 8            | 40 kB      | 16 kB      | 56 kB
web_hook_event_types_hooks  | 1            | 40 kB      | 16 kB      | 56 kB
watched_words               | 0            | 24 kB      | 32 kB      | 56 kB
user_exports                | 0            | 24 kB      | 16 kB      | 40 kB
github_user_infos           | 0            | 8192 bytes | 24 kB      | 32 kB
backup_draft_posts          | 0            | 8192 bytes | 24 kB      | 32 kB
categories_web_hooks        | 0            | 16 kB      | 16 kB      | 32 kB
theme_translation_overrides | 0            | 8192 bytes | 24 kB      | 32 kB
single_sign_on_records      | 0            | 8192 bytes | 24 kB      | 32 kB
post_reply_keys             | 0            | 0 bytes    | 24 kB      | 24 kB
backup_draft_topics         | 0            | 0 bytes    | 24 kB      | 24 kB
user_open_ids               | 0            | 8192 bytes | 16 kB      | 24 kB
post_details                | 0            | 8192 bytes | 16 kB      | 24 kB
message_bus                 | 0            | 8192 bytes | 16 kB      | 24 kB
anonymous_users             | 0            | 0 bytes    | 24 kB      | 24 kB
group_custom_fields         | 0            | 8192 bytes | 16 kB      | 24 kB
topic_invites               | 0            | 0 bytes    | 24 kB      | 24 kB
shared_drafts               | 0            | 0 bytes    | 24 kB      | 24 kB
instagram_user_infos        | 0            | 8192 bytes | 8192 bytes | 16 kB
reviewable_claimed_topics   | 0            | 0 bytes    | 16 kB      | 16 kB
user_field_options          | 0            | 8192 bytes | 8192 bytes | 16 kB
embeddable_hosts            | 0            | 8192 bytes | 8192 bytes | 16 kB
invited_groups              | 0            | 0 bytes    | 8192 bytes | 8192 bytes
developers                  | 0            | 0 bytes    | 8192 bytes | 8192 bytes
tags_web_hooks              | 0            | 0 bytes    | 8192 bytes | 8192 bytes
groups_web_hooks            | 0            | 0 bytes    | 8192 bytes | 8192 bytes
badge_posts                 | 0            | 0 bytes    | 0 bytes    | 0 bytes

(on the other hand, the /var/discourse/shared/standalone/postgres_data/base folder is over 47GB)

Can it be reduced somehow or is it logical given the size of some topics? (more details below).

The other issue maaaay be related, I believe, which is that I keep getting the famous " Due to extreme load, this is temporarily being shown to everyone as a logged out user would see it" I read on a post that increasing Unicorn Workers may be an option (never touched that, honestly havent found how to do it or how viable it is without endangering the whole installation). As a note we do have quite some topics with more than 10k answers, so that may be a correlation between DB Size and Performance issues? (Throwing it out, not sure).

I wonder if there is some way of optimizing it (I found this one), either on the very same instance or recurring to something like a HA installation (which I don’t know if it is supported), but I do believe that I’m jumping the gun in my ignorance. I do appreciate any help I could get.

As a note: I was using a swap file when the instance was smaller, I do believe it is disabled now (is there a way of verifying this?).

Thanks and sorry for the n00bness.

إن جدول post_timings هو وحش. هل هناك أي شيء يمكننا فعله لتقصيره أو “اختصاره” أو “تلخيصه” دون كسر أي شيء @sam؟

تحديث مصغر: حاولت تعديل إعدادات Unicorn Runners، لكنني لست متأكدًا مما إذا كانت هناك علاقة بين النواة الأساسية والموظف (worker) أم أنها تشبه نوعًا من مشاركة المعالج مثل CPU % × الثانية. هل توجد ممارسة مثلى في هذا الشأن؟

أيضًا، كنت أقرأ عن PostgreSQL لمعرفة كيفية التعامل مع حجم البيانات، لكن رغم وجود نسخ احتياطية، لا أعرف كيف سيتفاعل التطبيق على المدى الطويل إذا قمت ببساطة بحذف بعض البيانات.

تعديل سريع: قمت بإزالة ملف التبديل (Swap File) وأنا الآن أحلل كيفية المضي قدمًا مع أكثر من 10 آلاف موضوع. أرى في ذلك فرصة لأسأل عن مدى خطورة هذه المواضيع على الصورة الأكبر (أفترض وجود خطر معين نظرًا للتوصية، لكن إذا كان هناك جانب آخر أود معرفته، فسأكون سعيدًا بتعلمه إن أمكن).

لدي أيضًا بعض المواضيع التي تتجاوز 10 آلاف مشاركة، وألاحظ هذه الرسالة بين الحين والآخر عندما يكون الموقع مشغولاً للغاية.

أنا أنصحك بشدة بعدم تجاوز الإعدادات الافتراضية لـ Discourse، والتي تغلق المواضيع تلقائيًا التي تحتوي على أكثر من 10 آلاف رد. هناك سبب لوجود هذا الإعداد مفعلًا افتراضيًا. :scream:

بجانب ذلك، فإن مشكلة جدول post_timings الضخم تقع ضمن اهتماماتنا :satellite_antenna:، ونحن نخطط حاليًا لطرق للتعامل معها، ربما حتى في الإصدار الحالي 2.5، مع الإشارة إلى @sam و @eviltrout.

أشعر بأنه يحتاج إلى تأكيد ثلاثي، مع زر “موافق” نهائي يحمل النص: أنا موافق على حدوث أشياء سيئة.

هل هناك شخص ما يجعل المواضيع الضخمة تعمل بشكل فعّال؟

لدينا حوالي 80 موضوعًا رئيسيًا نشطًا طوال الوقت (128 ألف منشور في الأكبر منها).

نواجه أحيانًا بعض مشاكل 502 (ربما تكون مرتبطة بهذا، لا يمكنني الجزم)، لكن كل شيء يسير بسلاسة منذ أن قمنا بتعديل معلمة db_shared_buffers إلى قيمة أعلى من حجم قاعدة البيانات.

هذه فكرة سيئة للغاية، وينبغي إغلاق هذه المواضيع الضخمة لصالح مواضيع أصغر سنوية أو موسمية. انظر

لدي موقع يحتوي على عدد قليل من المواضيع الضخمة التي تضم أكثر من 100 ألف منشور. لقد أخبرتهم بأن ذلك كان خطأ، لكنهم أصروا على إبقائها كما هي. الآن يشتكون من مشاكل في الأداء. آمل أن أتمكن قريبًا من إعادة القيمة إلى الافتراضي وهو 10 آلاف.

لكن هذا الأمر جعلني أتعلم بعض الأشياء حول تحسين قواعد البيانات، وهذا يعتبر ميزة إضافية. :slight_smile:

أفهم ما تقصده، لكن يجب أن أعترف أيضًا أن تقسيم الموضوع إلى سنوات قد يكون محرجًا، خاصةً لأن لدينا الكثير من المحادثات حول الأشخاص.

تخيل موضوعًا عامًا عن ترامب أو موضوعًا عامًا عن الولايات المتحدة. في منتدانا، لدينا موضوع عن أحد رؤساء نادينا السابقين، وآخر عن الرئيس الحالي، وآخر لكل لاعب في فريق كرة القدم. أنت تفهم الفكرة. من السهل تقسيم المواضيع الأخرى حسب المواسم، لكن ليس هذه. بالتأكيد، الأمر ليس مستحيلًا، لكنه غير عملي إلى حد كبير.

تخيل فئة عن ترامب بشكل عام أو عن الولايات المتحدة بشكل عام.

لا أحد سيقرأ أكثر من 10000 منشور في موضوع واحد متتابعًا. ببساطة، لن يفعلوا ذلك. في مرحلة ما، يمكنك فقط أخذ نفس والبدء من جديد. أشك في أن هذه المواضيع أشبه بالدردشة أكثر من كونها نقاشات، وأن قلة قليلة من الناس يقرأون ما حدث أمس، ناهيك عن الأسبوع الماضي أو الشهر الماضي أو العام الماضي.

حسناً، لكن إجابتي على هذا هي

.. فأنت تختار التسبب في ألم كبير لنفسك هنا لـ “أسباب”.

إليك استعلام مستكشف البيانات الذي يحاكي الاستعلام المستخدم لجلب صفحة من المنشورات:

-- [params]
-- int :topic_id = 107216
-- int :offset = 10000

SELECT "posts"."id" FROM "posts" 
WHERE ("posts"."deleted_at" IS NULL) 
AND "posts"."topic_id" = :topic_id
AND "posts"."post_type" IN (1,2,3) ORDER BY "posts"."sort_order" ASC LIMIT 20 
OFFSET :offset

إليك موضوع عادي:

Limit  (cost=1911.35..1915.38 rows=1 width=8) 

إليك موضوع ضخم:

Limit  (cost=37475.88..37550.83 rows=20 width=8)

:+1:

أنا أثق بكم جميعًا، الأمر فقط أن مستخدمينا اعتادوا على هذا النمط، وسيتطلب بعض الجهد للوصول إلى الهدف… لكنه ممكن التحقيق.

وفي هذا الصدد، كنت أقرأ للتو منشور @codinghorror على الرابط Natural breakpoints or "chapters" for long topics? - #53 by codinghorror وتبادر إلى ذهني أن هذا النوع من جدول المحتويات، ولكن مخصصًا للمواضيع فقط، سيكون حلاً رائعًا يتيح تجميع تسلسل المواضيع وجعله مرئيًا أثناء التصفح والرد على موضوع واحد فقط.

لا تسيئوا الفهم، لم أقم بهذا العمل لإقناع أنتم، بل لإقناع عميلي الذي يحتوي على أكثر من 120 ألف موضوع وهو يشتكي من الأداء!

أتمنى أن يساعدكم هذا أيضًا. بالتوفيق لكم. :wink:

:clinking_glasses:

مفيد جداً! شكرًا لمشاركتك!

لدينا بالفعل خطط ملموسة على المدى القريب لتهدئة جدول post_timings، لكن المواضيع الضخمة ستظل مصدرًا للألم الكبير المستمر لسنوات عديدة قادمة.

:warning: وتذكّر أن هذا يأتي بعد العمل الرائع الذي قام به @tgxworld قبل حوالي عام لتقليل إجمالي حجم العمل الذي نقوم به على المواضيع الضخمة، وذلك بالتحول فعليًا إلى “وضع الطاقة المنخفض” لهذه المواضيع حتى لا تسبب ألمًا أقل.

لكن لا تخدع نفسك: لا تزال المواضيع الضخمة تضرب بقوة. :boom::boxing_glove:

بناءً على توصياتكم، وفي حين أحاول الإجابة على الأسئلة الأخرى (مع إدراكي أنكم تعملون على جدول post_timings)، سأقوم باستعادة الإعدادات الافتراضية لحجم المواضيع (مع اعتذاري عن قلة فطنتي، لماذا لا).

مع الأخذ بعين الاعتبار ذلك، لدي بعض الأسئلة آمل أن تتمكنوا من الإجابة عليها:

  1. بمجرد استعادة الإعداد، سيتم إغلاق تلك المواضيع. سيتم إنشاء مواضيع جديدة. ومع ذلك، هل وجود تلك المواضيع الكبيرة القديمة يشكل خطرًا على الموقع ككل؟ بمعنى، هل يجب أن “أقسمها” عدة مرات إلى مواضيع أصغر، أم أنه من المقبول تركها كما هي طالما أنها غير نشطة؟

  2. رأيت النقاش الذي أثاره @Paracelsus بشأن الراحة للمستخدمين. وبناءً على ذلك، أود أن أسأل عما إذا كان من الممكن وجود إعداد لـ “استئناف المواضيع تلقائيًا التي تم إغلاقها بسبب الحد الأقصى لحجم الموضوع”. أي، عند إغلاق موضوع ضخم تلقائيًا، هل من الممكن فتح موضوع جديد بنفس المؤلف، ونفس العنوان (مع إضافة رقم ربما في نهاية العنوان؟)، ويكون المحتوى الوحيد فيه رابطًا للموضوع السابق؟ (مع إضافة رابط للموضوع الجديد في الموضوع المغلق).

أعلم أن الأمر معقد بعض الشيء وقد لا يكون مرغوبًا فيه للجميع (لهذا السبب أرفعه كإعداد اختياري)، لكنه قد يكون مفيدًا للمواقع ذات الزيارات العالية والمواضيع الهامة، أعتقد. ما رأيكم؟

هذا يشبه السؤال: “هل يجب أن نشجّع الناس على التدخين بشراء سيجارة جديدة لهم تلقائيًا عندما ينفد مخزونهم؟” :wink:

لا، إلا إذا حظيت بحركة مرور كبيرة، وهو ما لا ينبغي أن يحدث إذا كانت مغلقة، أعتقد ذلك؟ راقب كيف تسير الأمور، لكن وقف نزيف المواضيع الضخمة النشطة هو الخطوة صفر، لذا فإنك على الطريق الصحيح :+1:

مجرد متابعة… نحن نحاول الآن التعامل مع هذه المواضيع الضخمة عن طريق تقسيمها إلى قطع بـ 10 آلاف منشور لكل قطعة. ومع ذلك، يبدو أن النظام غير راغب في التعامل مع استراتيجيتنا :sweat_smile:

أحصل على رسالة “502 Bad Gateway” عند تحديد 8000 منشور على الأقل في كل مرة ونقلها إلى موضوع جديد (لم أجرب مع كميات أقل من المنشورات). هل هناك طريقة لزيادة السعة أو طريقة أخرى/أفضل لتحقيق ذلك؟ @codinghorror @pfaffman

الحل هو تنفيذ ذلك من خلال وحدة تحكم Rails، لكنني لا أعرف على الفور كيفية القيام بذلك.

شيء مثل

old_topic=1
new_topic=2
Posts.where(topic_id: old_topic).where("post_number > 10000 and post_number < 20000").update_all(topic_id: new_topic, post_number=...)

لكن… أعتقد أنه قد تحتاج إلى وضع هذا داخل حلقة لإنشاء أرقام المنشورات الجديدة. ستحتاج إلى اختبار حلك على موقع تجريبي. إذا أخطأت في شيء ما، فستكون في ورطة كبيرة.

إذا لم يكن ذلك كافيًا لك لتفهم كيفية القيام بذلك، فستحتاج على الأرجح إلى النشر في Marketplace. لكنني أراهن أن أحدًا لن يقرأ المنشورات القديمة على أي حال، وأنه يجب عليك ببساطة إغلاقها وتركها كما هي، بل وربما حذفها أو إخفاؤها ما لم تعتقد أنها تحمل قيمة لتحسين محركات البحث (SEO).