Басты бетке

Генерация қалай жұмыс істейді

Бұл бет MockLab-тың негізгі талабы — жазба саны шектелмейді дегеннің — артындағы механизмді оның нақты ымыраларын жарнамаға ғана емес, өз пайымыңызбен бағалай алатындай ашық түсіндіреді.

Seed

Әр ресурстың seed мәні бар: ресурс жасалғанда тағайындалатын қысқа кездейсоқ жол. Seed, жазба индексімен бірге (тізімдегі орны — 0, 1, 2 және т.б.), генерация үшін қажет жалғыз кіріс. Бірдей seed және бірдей индекс кезінде бірдей өріс түрлері, бірдей ретпен, әрдайым бірдей мәндерді береді — кез келген машинада, кез келген процесте, жазба ешқашан дерекқорға жазылмай-ақ.

Механизм

i жазба индексі үшін сервер seed + ":" + i мәнінің сандық хэшін есептеп, оны шағын әрі жылдам псевдокездейсоқ сан генераторын бастаптау үшін пайдаланады. Схемадағы әрбір өріс содан кейін сол бір генератордан, схемада өрістер тұрған ретпен алады — схема құрастырғышында өрістерді қайта реттеу әр өрістің шығысын неге өзгертетінінің дәл себебі осы (әр өрістің тізбектен алатын мәні жылжиды), ал бар өріске баптау қосу тек сол өрістің өз шығысын өзгертеді. Жазбаның id мәні әдейі бөлек тізбектен, seed + ":id:" + i мәнінен бастапталған, — дерек өрістерінен тәуелсіз — арнайы схемаңыздың өрістерін түзету бар жазбаларға берілген id-лерді ешқашан өзгертпеу үшін.

Бұл сонымен қатар миллион жазба генерациялаудың неге іс жүзінде ешнәрсеге түспейтінінің себебі: онда іздеу де, дерекқор жолы да, әр жазба үшін сақталатын күй де мүлдем жоқ. Сервер жазба сайын, сұраныс сайын және сіз шынымен сұраған беттегі жазбалар үшін ғана шағын арифметика жасайды.

Іс жүзінде не сақталады

Генерацияланған дерек ешқашан сақталмайды. Сақталатын жалғыз нәрсе — сіздің үстеме өзгерістеріңіз, яғни сіз жасаған әрбір POST, PUT, PATCH және DELETE-тің нәтижесі (Жазба жасау, жаңарту және жою бетін қараңыз). Оқу сұранысы сұралған жазба терезесін генерациялап, оның үстіне кез келген үстеме өзгерісті біріктіреді (түзетілген жазбаларды алмастырады, жойылғандарды тастайды, жаңадан жасалғандарды қосады), содан кейін нәтижені сүзеді, іздейді, сұрыптайды және беттейді.

Шынайы шек: 10 000 жазба

10 000 немесе одан аз жазбасы бар ресурстар үшін сервер бір дерек нұсқасына бір рет бүкіл біріктірілген деректер жиынын жадқа толық жүктеп, сүзгілеу, іздеу және сұрыптауды содан қызмет етеді. 10 000-нан жоғарыда сүзгілеу, іздеу және сұрыптау мүлдем сөндіріледі — тек беттеу жұмыс істейді. Бұл жарнамалық ескертпе емес: осыдан әсер еткен жауапта нағыз, тексерілетін тақырып бар, X-MockLab-Notice: sort-filter-disabled-above-10000, сондықтан кодыңыз (немесе желі қойындысын қарап отырған сіз) мұны үнсіз сұрыпталмаған немесе сүзілмеген нәтиже алудың орнына болғанын біле аласыз.

const response = await fetch("https://mocklab.dev/m/demo7k2m9x/logs?sort=createdAt");
if (response.headers.get("X-MockLab-Notice") === "sort-filter-disabled-above-10000") {
  console.warn("This resource is too large for sort/filter — showing unsorted pages instead.");
}
const records = await response.json();
import { useQuery } from "@tanstack/react-query";

function useSortedRecords(sort) {
  return useQuery({
    queryKey: ["logs", sort],
    queryFn: async () => {
      const res = await fetch(`https://mocklab.dev/m/demo7k2m9x/logs?sort=${sort}`);
      return {
        records: await res.json(),
        sortDisabled: res.headers.get("X-MockLab-Notice") === "sort-filter-disabled-above-10000",
      };
    },
  });
}

Дәл сол шек 10 000-нан жоғарыдағы жеке жазба маршруттарына да байланысты түрде әсер етеді: id бойынша GET, PUT, PATCH және DELETE тек үстеме өзгерісі бар жазбалар үшін ғана жұмыс істейді, өйткені кез келген id-ды оның генерация индексіне қайта айналдыру сәйкес келгенше жазба генерациялап отыруды білдірер еді — дәл шектің болдырмауға арналған шексіз іздеуі. 10 000- нан төмен жазбада мұның ешқайсысы қолданылмайды; әр жазба id бойынша бірден қолжетімді, сұрыптау мен сүзгілеу әрдайым бар, және ескерту тақырыбы ешқашан пайда болмайды. Болашақ нұсқасы бұл шекті тиісті индекспен көтереді; әзірге ол жасырылмай, құжатталған.