MongoDB ҳужжатларга асосланган база бўлиб, маълумотни жадвал қаторлари ўрнига JSON'га ўхшаш ҳужжатлар кўринишида сақлайди. Node.js ва Python'да ёзилган кўплаб иловалар, айниқса тез ўзгарадиган маълумот тузилмасига эга стартаплар уни танлайди. Базани танлагандан кейин дарҳол иккинчи савол пайдо бўлади: MongoDB'ни қаерда ишлатиш керак? Бир йўл MongoDB компаниясининг Atlas булут хизматида тайёр кластер очиш, иккинчиси эса уни ўз VPS'ингизга ўрнатиб, ўзингиз бошқариш. Иккала йўлнинг ҳам аниқ афзаллик ва камчиликлари бор.
Оддий хостингда MongoDB ҳақида
Оддий (виртуал) хостинг одатда MySQL ва баъзан PostgreSQL билан келади, MongoDB эса унда деярли учрамайди. Сабаби оддий: MongoDB доимий ишлайдиган алоҳида сервер жараёни бўлиб, сезиларли ҳажмда оператив хотира талаб қилади. Шунинг учун реал танлов икки вариант орасида бўлади: Atlas каби бошқариладиган булут хизмати ёки VPS'даги ўз MongoDB серверингиз. Сайт файллари эса исталган жойда, жумладан оддий хостингда ҳам туриши мумкин, агар у ердан базага уланиш имкони бўлса.
Atlas: тайёр кластер ва кам маъмурий иш
Atlas'да кластер бир неча дақиқада яратилади. Ўрнатиш, версияни янгилаш, репликация ва мониторинг хизмат томонидан бажарилади, пуллик кластерларда автоматик захира ҳам бор. Тажриба ва кичик лойиҳалар учун бепул бошланғич кластер мавжуд, лекин унинг ҳажми ва имкониятлари чекланган, шунинг учун ишлаб турган тижорат лойиҳасини унга таяниб қуриш хавфли. Нархлар ва тариф шартлари ўзгариб туради, уларни расмий сайтдан текширинг.
Уланиш mongodb+srv:// манзили орқали амалга ошади. Энг кўп учрайдиган хато шундаки, Atlas'нинг тармоққа кириш рўйхатига илова ишлаётган сервернинг IP манзили қўшилмайди ва уланиш вақт тугаши билан узилади. Рухсат рўйхатига 0.0.0.0/0 ёзиб қўйиш муаммони "ҳал қилади", лекин базани бутун интернетга очиб қўяди, буни қилманг. Фақат ўз серверингизнинг аниқ IP манзилини қўшинг.
// .env
// MONGO_URI=mongodb+srv://app:PAROL@cluster0.abcde.mongodb.net/dostavka
const { MongoClient } = require('mongodb');
const client = new MongoClient(process.env.MONGO_URI);
await client.connect();
const orders = client.db('dostavka').collection('orders');
await orders.insertOne({ phone: '+998901234567', total: 85000, createdAt: new Date() });
Кечикиш ва маълумот жойлашуви
Atlas кластерлари йирик булут провайдерларининг минтақаларида жойлашади ва уларнинг ҳеч бири Ўзбекистон ичида эмас. Илова сервери Тошкентда, база эса хориждаги минтақада бўлса, ҳар бир сўров чегарадан ўтиб-қайтади. Битта саҳифа базага ўнлаб сўров юборса, бу кечикишлар қўшилиб, фойдаланувчи сезадиган секинликка айланади. Шунинг учун илова ва база имкон қадар бир жойда, битта тармоқда бўлгани маъқул.
Иккинчи муҳим жиҳат қонунчилик. Ўзбекистонда фуқароларнинг шахсий маълумотларини мамлакат ҳудудидаги серверларда сақлаш талаби мавжуд. Агар базангизда мижозларнинг исми, телефон рақами ёки манзили сақланса, бу маълумотларни хорижий булутга жойлаштиришдан олдин амалдаги талабларни расмий манбалардан ёки юрист билан аниқлаб олинг. Кўп ҳолларда бу масала танловни ўз-ўзидан Ўзбекистондаги сервер фойдасига ҳал қилади.
Мисол: Тошкентдаги етказиб бериш хизмати
Овқат етказиб берувчи кичик стартап Node.js'да илова ёзди ва буюртмаларни MongoDB'да сақлайди. Дастлабки икки ойда улар Atlas'нинг бепул кластеридан фойдаланиб, ғояни тез синаб кўришди. Буюртмалар сони ўсгач, учта муаммо пайдо бўлди: курьер иловасидаги рўйхат секин очиларди, бепул кластер чекловларига яқинлашилди, буюртма маълумотларида эса мижоз телефонлари ва манзиллари бор эди. Жамоа базани Ўзбекистондаги VPS'га, илова билан битта серверга кўчиришга қарор қилди.
Ўз серверингизда MongoDB: ўрнатиш ва ҳимоя
MongoDB Community Edition'ни Ubuntu'да расмий MongoDB репозиториясидан ўрнатиш тавсия этилади, чунки тизим пакетларидаги версия эскирган ёки умуман бўлмаслиги мумкин. Ўрнатиш буйруқлари версияга қараб ўзгаради, шунинг учун уларни расмий ҳужжатлардан олинг. Ўрнатгандан кейинги энг муҳим иш иккита: базани фақат сервернинг ўзидан уланадиган қилиш ва аутентификацияни ёқиш.
# /etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1
security:
authorization: enabled
Аввал маъмур ва илова учун алоҳида фойдаланувчи яратинг. Илова фойдаланувчисига фақат ўз базасига ўқиш ва ёзиш ҳуқуқи берилади, маъмур пароли эса кундалик ишда ишлатилмайди. Янги созламалардан кейин sudo systemctl restart mongod билан хизматни қайта ишга туширинг.
mongosh
use admin
db.createUser({ user: "admin", pwd: passwordPrompt(), roles: [ { role: "root", db: "admin" } ] })
use dostavka
db.createUser({ user: "app", pwd: passwordPrompt(), roles: [ { role: "readWrite", db: "dostavka" } ] })
Энди илова ички манзил орқали уланади ва базага ташқаридан кириш имкони йўқ:
MONGO_URI=mongodb://app:PAROL@127.0.0.1:27017/dostavka?authSource=dostavka
Бир нечта ҳужжатни бирга ўзгартирадиган транзакциялар учун MongoDB реплика тўпламини (replica set) талаб қилади, ҳатто у битта сервердан иборат бўлса ҳам. Аутентификация ёқилган реплика тўплами учун қўшимча равишда калит файл созланади, бу тартибни ҳам расмий ҳужжатлар бўйича бажаринг.
Хотира, захира ва кундалик хизмат
MongoDB'нинг WiredTiger двигатели стандарт ҳолатда оператив хотиранинг катта қисмини кеш учун олади: тахминан (RAM − 1 GB) нинг ярми ёки 256 MB, қайси бири катта бўлса. Кичик VPS'да MongoDB илова билан бирга ишласа, кешни storage.wiredTiger.engineConfig.cacheSizeGB параметри билан чеклаш фойдали. Захира учун mongodump ва mongorestore ишлатилади, буйруқни cron орқали ҳар куни ишга туширинг ва архивни бошқа жойга ҳам нусхаланг.
mongodump --uri="mongodb://app:PAROL@127.0.0.1:27017/dostavka?authSource=dostavka" \
--archive=/backup/dostavka-$(date +%F).gz --gzip
mongorestore --uri="mongodb://app:PAROL@127.0.0.1:27017/dostavka?authSource=dostavka" \
--archive=/backup/dostavka-2026-11-04.gz --gzip --drop
Қайси бирини танлаш керак
| Мезон | Atlas | Ўз серверингиз (VPS) |
|---|---|---|
| Бошлаш тезлиги | Бир неча дақиқа | Ўрнатиш ва созлаш керак |
| Маъмурий иш | Асосан хизмат бажаради | Янгилаш, захира, мониторинг сизда |
| Ўзбекистондан кечикиш | Хорижий минтақа туфайли юқорироқ | Илова билан битта серверда минимал |
| Шахсий маълумот жойлашуви | Хорижда | Ўзбекистонда сақлаш мумкин |
| Назорат | Хизмат имкониятлари билан чекланган | Тўлиқ |
Atlas тажриба, прототип ва мижозлари асосан хорижда бўлган лойиҳалар учун қулай, айниқса жамоада сервер маъмури бўлмаса. Фойдаланувчилари Ўзбекистонда бўлган, шахсий маълумот сақлайдиган ва тезлик муҳим бўлган лойиҳалар учун эса мамлакат ичидаги VPS'да ўз MongoDB серверингиз одатда тўғрироқ танлов. Бундай серверни sayt.uz кабинетидан буюртма қилиб, илова ва базани битта жойда ушлаб туриш мумкин.