Endi arxitektor uchun eng muhim qatlamlardan biri:
Data architecture - systemda ma’lumot qanday saqlanadi, qanday oqadi, qanday himoyalanadi, qanday o‘zgaradi va vaqt o‘tib qanday boshqariladi.
Bu mavzu ichida quyidagilar bor: Polyglot persistence strategy, Data mesh concepts, Event streaming as system of record, Schema evolution & compatibility, GDPR & data privacy patterns.
1. Data Architecture nima?
Oddiy developer ko‘pincha shunday o‘ylaydi:
Entity yozamiz
Repository yozamiz
Databasega save qilamizArxitektor esa boshqa savollarni beradi:
Qaysi data qayerda saqlanadi?
Qaysi service data egasi?
Data kim tomonidan o‘zgartiriladi?
Read va write modeli bir xilmi?
Data qancha vaqt saqlanadi?
Backup va restore qanday?
Schema o‘zgarsa eski systemlar buzilmaydimi?
Sensitive data qanday himoyalanadi?
Report va analytics operational DB’ni qiynamaydimi?Ya’ni data architecture - faqat database tanlash emas.
Bu butun system bo‘ylab data ownership, consistency, flow, privacy, lifecycle masalasi.
2. Data Architecture nega muhim?
Kichik loyihada bitta PostgreSQL yetadi:
Spring Boot App → PostgreSQLLekin loyiha kattalashganda muammolar chiqadi:
Report query production DB’ni sekinlashtiradi
Bir service boshqa service table’ini to‘g‘ridan-to‘g‘ri o‘qiydi
Schema o‘zgarsa boshqa app buziladi
Customer data hamma joyda duplicate bo‘lib ketadi
Sensitive data loglarga chiqib ketadi
Delete qilingan user analytics’da qoladi
Event format o‘zgarsa consumerlar yiqiladiArxitektor shu muammolarni oldindan kamaytiradi.
3. Data Ownership
Data ownership nima?
Har bir muhim data uchun aniq egasi bo‘lishi kerak.
Masalan e-commerce system:
Data | Egasi |
|---|---|
User account | Identity/Auth service |
Product | Catalog service |
Order | Order service |
Payment | Payment service |
Delivery status | Delivery service |
Notification preference | Notification service |
Asosiy qoida:
Bir data’ning faqat bitta owner’i bo‘lishi kerak.
Yomon holat
Order Service → user_db.users table’ini to‘g‘ridan-to‘g‘ri o‘qiydi
Payment Service → order_db.orders table’ini update qiladi
Report Service → hamma DB table’lariga JOIN qiladiBu boshida tez ishlaydi. Keyin chaos boshlanadi.
Muammo:
Qaysi service data egasi ekani noaniq
Schema o‘zgarsa boshqa servicelar buziladi
Data consistency buziladi
Teamlar bir-birini bloklaydiYaxshi holat
Order Service user haqida kerakli ma’lumotni Auth/User API orqali oladi
Payment Service order statusni event orqali biladi
Report Service read model yoki data warehouse’dan o‘qiydiYa’ni service boshqa service’ning ichki database’iga kirmaydi.
4. Database per Service
Microservices’da ko‘p ishlatiladigan qoida:
Har service o‘z database’iga ega bo‘ladi.
User Service → user_db
Order Service → order_db
Payment Service → payment_db
Notification → notification_dbBu shuni anglatadi:
Order Service payment_db ichiga kirmaydi
Payment Service order_db ichiga kirmaydiUlar API yoki event orqali gaplashadi.
Afzalliklari
Afzallik | Tushuntirish |
|---|---|
Ownership aniq | Har service o‘z data’siga javobgar |
Mustaqil schema | Service o‘z table’larini o‘zi o‘zgartiradi |
Mustaqil scaling | Payment DB alohida scale bo‘lishi mumkin |
Fault isolation | Bitta DB muammosi butun systemga kamroq ta’sir qiladi |
Technology freedom | Har service o‘ziga mos DB tanlashi mumkin |
Kamchiliklari
Muammo | Tushuntirish |
|---|---|
JOIN yo‘qoladi | Service’lar orasida SQL JOIN qilib bo‘lmaydi |
Transaction qiyinlashadi | Distributed transaction kerak bo‘lib qoladi |
Reporting qiyinlashadi | Data bir nechta DB’da turadi |
Consistency murakkab | Eventual consistency bilan yashash kerak |
Operational cost oshadi | Backup, monitoring, migration ko‘payadi |
Arxitektor xulosasi
Database per service - microservices uchun kuchli yondashuv, lekin u bepul emas. Kichik teamda bu complexity juda qimmatga tushishi mumkin.
Modular monolith’da esa bitta DB bo‘lishi mumkin, lekin table ownership baribir aniq bo‘lishi kerak.
5. Polyglot Persistence
Polyglot persistence nima?
Polyglot persistence - har xil data turi uchun har xil database ishlatish.
Ya’ni:
Hamma narsa uchun bitta PostgreSQL ishlatish shart emas.Masalan:
Use case | Mos texnologiya |
|---|---|
Transactional data | PostgreSQL / MySQL |
Cache | Redis |
Search | Elasticsearch / OpenSearch |
Event streaming | Kafka |
Document data | MongoDB |
Analytics | ClickHouse / BigQuery |
Time-series metrics | Prometheus / TimescaleDB |
Object/file storage | S3 / MinIO |
Real misol: Sales Agent system
PostgreSQL:
- agents
- customers
- orders
- visits
Redis:
- cache
- session
- rate limit
Kafka/RabbitMQ:
- order_created event
- notification jobs
OpenSearch:
- customer/product search
S3/MinIO:
- uploaded images
- reports
- invoices
ClickHouse:
- analytics/reportingBu polyglot persistence.
Afzalliklari
Afzallik | Tushuntirish |
|---|---|
Har ishga mos tool | Search uchun Search engine, cache uchun Redis |
Performance yaxshi | Har DB o‘z vazifasini yaxshi bajaradi |
Scaling moslashuvchan | Analytics operational DB’dan ajraladi |
Featurelar kuchli | Full-text search, stream, analytics osonlashadi |
Kamchiliklari
Muammo | Tushuntirish |
|---|---|
Complexity oshadi | Ko‘p texnologiyani boshqarish kerak |
Monitoring ko‘payadi | Har bir DB kuzatiladi |
Backup strategiyasi murakkab | Har storage turi alohida backup talab qiladi |
Data sync muammosi | PostgreSQL’dan Elasticsearch’ga data o‘tishi kerak |
Team expertise kerak | Har toolni bilish kerak |
Eng katta xato
Yomon yondashuv:
PostgreSQL ham bor
MongoDB ham bor
Redis ham bor
Elasticsearch ham bor
Kafka ham bor
Lekin aniq sabab yo‘qBu architecture emas, bu texnologiya yig‘indisi.
Yaxshi yondashuv:
PostgreSQL - transactional source of truth
Redis - temporary cache
OpenSearch - full-text search projection
Kafka - event transport
ClickHouse - analyticsHar birining roli aniq.
6. Source of Truth
Source of truth nima?
Source of truth - ma’lumotning eng ishonchli, rasmiy manbasi.
Masalan:
Order status uchun source of truth → Order Service DB
Payment status uchun source of truth → Payment Service DB
Customer profile uchun source of truth → Customer Service DBAgar Redis cache’da boshqa qiymat, DB’da boshqa qiymat bo‘lsa, qaysi biri haqiqiy?
Javob oldindan aniq bo‘lishi kerak.
Misol
PostgreSQL:
order_id=1001, status=PAID
Redis:
order_id=1001, status=PENDINGBu holatda PostgreSQL source of truth bo‘lsa:
Redis noto‘g‘ri yoki eski cache hisoblanadi.Qoida
Cache source of truth bo‘lmasligi kerak, agar maxsus shunday design qilinmagan bo‘lsa.
Ko‘p systemlarda:
Database = source of truth
Cache = tezlashtirish uchun nusxa
Search index = query uchun projection
Analytics DB = report uchun nusxa7. Event Streaming as System of Record
Bu nima degani?
Odatda system of record - database.
Masalan:
orders table = order holatining asosiy manbasiLekin event-driven architecture’da ba’zan event log asosiy manba bo‘lishi mumkin:
OrderCreated
OrderPaid
OrderShipped
OrderCancelledYa’ni system holati eventlardan tiklanadi.
Bu Event Sourcing’ga yaqin.
Kafka misol
Kafka topic: order-events
1. OrderCreated
2. OrderItemAdded
3. PaymentReceived
4. OrderConfirmed
5. OrderShippedRead model, analytics, notification - hammasi shu eventlardan qurilishi mumkin.
Kafka events → Order Projection DB
Kafka events → Analytics DB
Kafka events → Notification Service
Kafka events → Search IndexAfzalliklari
Afzallik | Tushuntirish |
|---|---|
To‘liq tarix | Har o‘zgarish event sifatida saqlanadi |
Replay | Yangi projectionni eski eventlardan qayta qurish mumkin |
Integration oson | Ko‘p consumer bitta event streamdan foydalanadi |
Audit kuchli | Nima bo‘lganini ko‘rish mumkin |
Loose coupling | Producer consumerlarni bilmaydi |
Kamchiliklari
Muammo | Tushuntirish |
|---|---|
Event design qiyin | Eventlar biznes ma’noli bo‘lishi kerak |
Schema evolution kerak | Event format o‘zgaradi |
Ordering muammosi | Eventlar tartibi muhim bo‘lishi mumkin |
Exactly-once murakkab | Duplicate va retry bilan ishlash kerak |
Debug qiyin | Holat eventlar oqimidan kelib chiqadi |
Storage policy muhim | Eventlar qancha vaqt saqlanishi kerak? |
Qachon mos?
Event streaming as system of record mos:
audit juda muhim;
history/replay kerak;
ko‘p system bir xil eventlardan foydalanadi;
real-time analytics kerak;
biznes jarayon eventlar ketma-ketligi bilan ifodalanadi.
Mos emas:
oddiy CRUD;
kichik admin panel;
team event-driven tajribasiz;
event schema boshqarish jarayoni yo‘q.
8. Schema Evolution
Schema evolution nima?
System ishlayotgan paytda data modeli o‘zgaradi.
Masalan:
customer table’ga phone_number qo‘shildi
order event’ga deliveryType qo‘shildi
API response’dan field olib tashlandi
JSON structure o‘zgardiBu o‘zgarishlar eski client yoki consumerlarni buzmasligi kerak.
Database schema evolution
Yomon migration:
ALTER TABLE customers ADD COLUMN phone_number VARCHAR(20) NOT NULL;Agar table’da eski rowlar bo‘lsa, bu production’da muammo berishi mumkin.
Yaxshiroq tartib:
1. Nullable column qo‘shish
2. App yangi fieldni yozishni boshlaydi
3. Eski data backfill qilinadi
4. Validation qo‘shiladi
5. Keyin NOT NULL constraint qo‘yiladiSafe migration pattern
Masalan full_name o‘rniga first_name, last_name qilmoqchimiz.
Yomon:
full_name column delete
first_name qo‘shish
last_name qo‘shish
app deployBu downtime yoki bug keltiradi.
Yaxshi:
1. first_name, last_name nullable qo‘shiladi
2. app ikkala formatni ham o‘qiy oladi
3. yangi yozuvlar first_name/last_name yozadi
4. eski data backfill qilinadi
5. hamma consumer yangilanadi
6. full_name deprecated bo‘ladi
7. keyin delete qilinadiBu expand-contract pattern.
9. Event Schema Compatibility
Event-driven systemda schema evolution yanada muhim.
Masalan eski event:
{
"eventType": "OrderCreated",
"orderId": "1001",
"total": 250000
}Yangi event:
{
"eventType": "OrderCreated",
"orderId": "1001",
"total": 250000,
"currency": "UZS"
}Bu odatda backward compatible, chunki yangi field qo‘shildi.
Lekin bu xavfli:
{
"eventType": "OrderCreated",
"id": "1001",
"amount": 250000
}Bu eski consumerlarni buzadi, chunki orderId va total yo‘q.
Compatibility turlari
Tur | Ma’nosi |
|---|---|
Backward compatible | Yangi consumer eski data’ni o‘qiy oladi |
Forward compatible | Eski consumer yangi data’ni o‘qiy oladi |
Full compatible | Ikkala tomonga mos |
Breaking change | Eski yoki yangi tomon buziladi |
Event schema qoidalari
Yaxshi qoidalar:
Field qo‘shish mumkin, lekin optional/default bilan
Field nomini o‘zgartirmang
Fieldni darrov delete qilmang
Meaning o‘zgartirmang
Enum value qo‘shishda ehtiyot bo‘ling
Event version yuriting
Schema registry ishlating
Consumerlarni tolerant qilingVersioning misol
{
"eventType": "OrderCreated",
"eventVersion": 2,
"orderId": "1001",
"total": 250000,
"currency": "UZS"
}Yoki topic bo‘yicha:
order-created-v1
order-created-v2Lekin topicni versionlash ham ko‘payib ketsa boshqarish qiyinlashadi.
10. Data Mesh Concepts
Data mesh nima?
Data mesh - data ownership’ni markaziy data teamdan domain teamlarga tarqatish yondashuvi.
Oddiy model:
Hamma data → Central Data Team → Data WarehouseMuammo:
Central team bottleneck bo‘ladi
Domain ma’nosini yaxshi bilmasligi mumkin
Data sifati pasayadi
Reportlar kechikadiData mesh’da esa:
Sales domain → o‘z data product’iga javobgar
Orders domain → o‘z data product’iga javobgar
Payments domain → o‘z data product’iga javobgarData product nima?
Data product - boshqa teamlar ishlata oladigan, hujjatlashtirilgan, sifatli data manbasi.
Masalan:
orders_daily_summary
customer_activity_events
payment_success_metrics
agent_visit_historyData product’da bo‘lishi kerak:
Owner
Schema
Description
Quality rules
SLA/SLO
Access policy
Versioning
LineageData mesh prinsiplari
Prinsip | Tushuntirish |
|---|---|
Domain ownership | Data uchun domain team javobgar |
Data as a product | Data ham product kabi sifatli bo‘lishi kerak |
Self-serve platform | Teamlar data pipeline’ni oson qurishi kerak |
Federated governance | Umumiy standartlar bor, lekin hamma narsa markaziy emas |
Qachon kerak?
Data mesh kerak bo‘lishi mumkin:
kompaniya katta bo‘lsa;
domain teamlar ko‘p bo‘lsa;
central data team bottleneck bo‘lsa;
analytics va reporting ko‘p bo‘lsa;
data ownership chalkash bo‘lsa.
Kichik projectda data mesh ortiqcha bo‘lishi mumkin.
11. Operational DB vs Analytical DB
Farqi
DB turi | Maqsad |
|---|---|
Operational DB | App ishlashi uchun: order yaratish, user login, payment |
Analytical DB | Report, dashboard, BI, trend analysis |
Yomon holat:
Production PostgreSQL’da og‘ir report query ishlaydi
JOIN + GROUP BY + millions rows
Natija: API sekinlashadiYaxshi holat:
Production DB → CDC/Event/Pipeline → Analytics DBMasalan:
PostgreSQL → Kafka/Debezium → ClickHouseYoki:
PostgreSQL → scheduled ETL → BigQuerySales Agent misoli
Operational DB:
orders
visits
customers
agentsAnalytical DB:
daily_agent_sales
monthly_region_performance
customer_visit_frequency
product_sales_trendsSupervisor dashboard analytics DB’dan o‘qisa, production transaction DB kamroq qiynaladi.
12. CDC - Change Data Capture
CDC nima?
CDC - database’dagi o‘zgarishlarni ushlab, boshqa systemlarga yuborish.
Masalan:
orders table’da yangi row paydo bo‘ldi
CDC uni eventga aylantirdi
Kafka’ga yubordi
Analytics DB uni qabul qildiPostgreSQL WAL → Debezium → Kafka → ClickHouse/OpenSearchQachon foydali?
CDC foydali:
legacy systemdan event olish kerak bo‘lsa;
analytics pipeline kerak bo‘lsa;
search index yangilanishi kerak bo‘lsa;
DB o‘zgarishlarini boshqa servicelarga tarqatish kerak bo‘lsa.
Ehtiyot bo‘lish kerak
CDC eventlari ko‘pincha technical bo‘ladi:
row inserted
row updated
column changedBusiness event esa boshqa:
OrderConfirmed
PaymentReceived
CustomerBlockedArxitektor farqni bilishi kerak.
CDC integration uchun yaxshi, lekin business eventlarning to‘liq o‘rnini har doim bosmaydi.
13. Data Privacy
Data privacy nima?
Data privacy - user yoki biznesga tegishli sensitive data’ni noto‘g‘ri ishlatmaslik, oshkor qilmaslik va kerak bo‘lganda o‘chirish.
Sensitive data:
phone number
passport data
location
payment info
address
personal messages
health data
financial dataPrivacy by Design
Arxitektor boshidan privacy’ni o‘ylashi kerak.
Savollar:
Bu data bizga haqiqatan kerakmi?
Qancha vaqt saqlaymiz?
Kim ko‘ra oladi?
Logga chiqib ketmaydimi?
Backup ichida qancha turadi?
User delete so‘rasa, qayerlardan o‘chiramiz?
Analytics’da anonymized bo‘ladimi?14. GDPR va data privacy patterns
GDPR Yevropa regulation’i bo‘lsa ham, uning prinsiplari umumiy foydali.
Muhim patternlar
Pattern | Tushuntirish |
|---|---|
Data minimization | Faqat kerakli data’ni yig‘ish |
Purpose limitation | Data faqat ma’lum maqsadda ishlatiladi |
Consent tracking | User roziligi saqlanadi |
Right to access | User o‘z data’sini ko‘ra oladi |
Right to erasure | User data o‘chirilishini so‘rashi mumkin |
Pseudonymization | Identity alohida saqlanadi |
Anonymization | Shaxsni aniqlab bo‘lmaydigan qilish |
Retention policy | Data qancha vaqt saqlanishi aniq |
Audit trail | Kim qachon data’ga kirgani yoziladi |
Data minimization misol
Yomon:
Registration:
- ism
- telefon
- passport
- manzil
- tug‘ilgan sana
- karta raqamiAgar appga faqat login kerak bo‘lsa, bu ortiqcha.
Yaxshi:
Registration:
- phone number
- password/OTPKerak bo‘lsa keyin qo‘shimcha data olinadi.
Pseudonymization
Sensitive identity alohida saqlanadi.
orders table:
user_id = 123
total = 250000
user_private_data table:
user_id = 123
phone = +998...
passport = ...Analytics’da faqat user_id yoki hashed identifier ishlatiladi.
Anonymization
Shaxsni qayta aniqlab bo‘lmaydigan qilish.
Masalan analytics uchun:
User Ali, phone +99890... → Region=Tashkent, AgeGroup=25-34Endi individual user emas, aggregate data ishlatiladi.
15. Encryption
Encryption at rest
Data diskda shifrlangan bo‘ladi.
Masalan:
Database disk encryption
S3 bucket encryption
Backup encryptionEncryption in transit
Data tarmoq orqali ketayotganda shifrlanadi.
HTTPS/TLS
mTLS service-to-service
TLS for database connectionField-level encryption
Ayrim fieldlar application darajasida shifrlanadi.
Masalan:
passport_number
card_token
medical_infoDB admin ham plain text ko‘rmasligi mumkin.
Hashing vs Encryption
Tushuncha | Farqi |
|---|---|
Hashing | Qaytarib bo‘lmaydi |
Encryption | Kalit bilan qaytarib ochiladi |
Password uchun encryption emas, hashing kerak:
BCrypt
Argon2
PBKDF216. Data Retention
Retention nima?
Retention - data qancha vaqt saqlanishini belgilash.
Masalan:
Login audit logs → 1 yil
Payment records → 5 yil
Temporary OTP → 5 daqiqa
Raw location data → 30 kun
Aggregated analytics → 3 yilAgar retention bo‘lmasa, data cheksiz ko‘payadi va risk oshadi.
Retention policy’da bo‘lishi kerak
Data turi
Saqlash muddati
O‘chirish jarayoni
Archive kerakmi?
Legal talab bormi?
Backup’dan qachon yo‘qoladi?
Kim javobgar?17. Backup va Restore
Backup borligi yetarli emas.
Restore test qilinmagan backup - ishonchli backup emas.
Backup strategy
Savol | Ma’no |
|---|---|
RPO qancha? | Qancha data yo‘qotishga chidash mumkin? |
RTO qancha? | Qancha vaqtda tiklash kerak? |
Backup qayerda? | Region/serverdan tashqaridami? |
Backup shifrlanganmi? | Sensitive data himoyalanganmi? |
Restore test qilinganmi? | Haqiqatan ishlaydimi? |
RPO/RTO
RPO = Recovery Point Objective
Qancha data yo‘qotish mumkin?
RTO = Recovery Time Objective
Qancha vaqtda systemni tiklash kerak?Misol:
RPO = 5 minutes
Demak oxirgi 5 daqiqalik data yo‘qolishi mumkin.
RTO = 30 minutes
Demak system 30 daqiqa ichida tiklanishi kerak.18. Data Quality
Data quality nima?
Data borligi yetarli emas. U to‘g‘ri, toza va ishonchli bo‘lishi kerak.
Data quality muammolari:
duplicate customer
phone number noto‘g‘ri formatda
order status impossible holatda
payment bor, lekin order topilmaydi
created_at null
negative priceData quality checks
NOT NULL constraints
Foreign key constraints
Unique constraints
Validation rules
Deduplication jobs
Data reconciliation
Monitoring dashboards
Anomaly detectionMisol
Order status transition:
CREATED → PAID → SHIPPED → DELIVEREDNoto‘g‘ri:
CREATED → DELIVERED
PAID → CREATED
CANCELLED → SHIPPEDBunday qoidalar domain layer va database constraintlarda himoyalanishi kerak.
19. Master Data Management
MDM nima?
Master Data Management - kompaniyadagi asosiy data obyektlarini yagona va to‘g‘ri boshqarish.
Masalan:
Customer
Product
Region
Branch
Employee
SupplierMuammo:
Sales systemda customer nomi boshqacha
Billing systemda boshqacha
Support systemda boshqachaMDM shu chalkashlikni kamaytiradi.
Golden Record
Golden record - bitta entity uchun eng ishonchli birlashtirilgan record.
Masalan bitta customer 3 joyda bor:
CRM: Ali Valiyev, +99890111...
Billing: A. Valiyev, +99890111...
Support: Ali, +99890111...MDM ularni bitta customer sifatida bog‘laydi.
20. Data Architecture qarorlarini qanday tanlash kerak?
Arxitektor quyidagi tartibda o‘ylaydi:
1. Data domainlarini aniqlash
2. Har domain uchun owner belgilash
3. Source of truthni aniqlash
4. Consistency talabini aniqlash
5. Read/write patternni tahlil qilish
6. Storage turini tanlash
7. Schema evolution strategiyasini belgilash
8. Privacy va retention qoidalarini qo‘shish
9. Backup/restore strategiyasini belgilash
10. Monitoring va data quality checks qo‘shish21. Real loyiha uchun data architecture: Sales Agent / Supervisor
Sizdagi ikki Android app va backend uchun amaliy variant:
Android Apps
- Supervisor
- Sales Agent
|
API Gateway / Nginx
|
Spring Boot Modular Monolith
|
PostgreSQL
|
Redis
|
RabbitMQ/Kafka
|
Analytics/Search/StorageBoshlang‘ich data architecture
PostgreSQL = source of truth
Modules:
- auth
- agents
- customers
- visits
- orders
- reports
- notificationsTable ownership:
Module | Tables |
|---|---|
auth | users, roles, permissions |
agents | agents, agent_regions |
customers | customers, customer_contacts |
visits | visits, visit_photos |
orders | orders, order_items |
reports | report_snapshots |
notifications | notification_templates, notification_logs |
Qo‘shimcha storage
Ehtiyoj | Texnologiya |
|---|---|
Session/cache/rate limit | Redis |
Photo/file upload | S3 yoki MinIO |
Async notification | RabbitMQ |
Full-text search | PostgreSQL full-text yoki OpenSearch |
Heavy analytics | PostgreSQL read replica yoki ClickHouse |
Audit trail | audit_log table yoki event log |
Eventlar
CustomerCreated
VisitStarted
VisitCompleted
OrderCreated
OrderConfirmed
PaymentReceived
NotificationRequestedBu eventlar:
notification
reporting
audit
analytics
search indexinguchun ishlatilishi mumkin.
22. Data Architecture bo‘yicha katta xatolar
1. Hamma data’ni bitta "shared database"ga tashlash
Boshida oson. Keyin owner yo‘qoladi.
2. Cache’ni source of truth qilib yuborish
Redis o‘chsa yoki eski qiymat saqlasa, system noto‘g‘ri ishlaydi.
3. Schema migration’ni production’da birdan qilish
Safe migration pattern bo‘lmasa, downtime bo‘ladi.
4. Event schema’ni o‘ylamasdan o‘zgartirish
Consumerlar yiqiladi.
5. Sensitive data’ni logga chiqarish
Masalan:
password
token
passport
card number
phone verification codelogga chiqmasligi kerak.
6. Backup bor, lekin restore test yo‘q
Bu eng xavfli holatlardan biri.
7. Analytics query production DB’ni o‘ldirishi
Reportlar alohida read model yoki analytical DB’dan o‘qishi kerak.
23. Arxitektor uchun qisqa checklist
Data owner aniqmi?
Source of truth aniqmi?
Service boshqa servicening DB’siga kirmaydimi?
Schema migration safe usuldami?
Event schema versionlanganmi?
Sensitive data logga chiqmayaptimi?
Retention policy bormi?
Backup va restore test qilinganmi?
Read-heavy querylar alohida modelga chiqarilganmi?
Cache invalidation strategiyasi bormi?
Data quality checks bormi?24. Yakuniy formula
Data Architecture = Ownership
+ Source of Truth
+ Storage Strategy
+ Schema Evolution
+ Data Flow
+ Privacy
+ Backup/Restore
+ QualityArxitektor darajasidagi asosiy fikr:
Data systemning eng qimmat aktivi. Kodni qayta yozish mumkin, lekin noto‘g‘ri yo‘qotilgan yoki buzilgan data’ni tiklash juda qiyin.
Java/Spring Boot loyihalar uchun amaliy start:
PostgreSQL as source of truth
+ clear module/table ownership
+ Redis only for cache/session
+ safe migrations with Flyway/Liquibase
+ events for integration
+ read replica/read model for reports
+ S3/MinIO for files
+ encryption + retention policy
+ backup restore testing