Daha çox

PostgreSQL verilənlər bazasına GPX sənədləri əlavə edin və verilmiş bir dəyəri olan bir sütun əlavə edin


Postgres verilənlər bazasına bir gpx track məlumatı necə əlavə edəcəyimi artıq öyrəndim:

'ogr2ogr -append -f PostgreSQL "PG: dbname = your_db user = xxxx password = yyyy" filename.gpx'

Hər şey yaxşı işləyir, amma indi hər bir track üçün əlavə bir sütun istərdim ki, müəyyən bir trek tapa biləyəm ...

Bu bir şəkildə mümkündürmü?

Hack, bu kimi hər bir idxaldan sonra bir psql əmrini yerinə yetirmək olardı

'"psql -U postgres -d tracks -c' parçaları YENİLƏN SET track_id = 1234 WHERE WHERE ogc_fid = (SELECT max (ogc_fid) FROM FROM); '"'

Ancaq bəlkə ogr2ogr üçün bunu etmək üçün bir seçim var?

Təşəkkürlər


Spatialite ilə bir test etdim və bunun PostGIS ilə oxşar şəkildə işləməməsinin səbəbini görmürəm. Birinci əmr yeni bir Spatialite verilənlər bazası yaradır, ilk gpx sənədindən "izlər" qatını əlavə edir və "id" yeni bir sütuna "id_323" dəyərini yazır. İkinci komanda növbəti gpx sənədlərindən parçaları əlavə edir və "id_324" id verir. Qeyd edək ki, gpx faylında bir neçə parça varsa, hamısı eyni id əldə edəcəkdir.

C:  temp > ogr2ogr -f sqlite -dsco spatialite = yes gpx.sqlite gpxtest1.gpx -sql "t. *, 'İd_323' seçerek t" C:  temp > ogr2ogr -f sqlite -append gpx.sqlite gpxtest2.gpx -sql "t. *, 'id_324' seçimi t parçasından id olaraq seçin"

Yeniləmə əmrinizi ogrinfo-dan bu şəkildə istifadə edərək GDAL əmr pəncərəsindən də çalışdırmaq mümkün olmalıdır:

ogrinfo -f PostgreSQL "PG: dbname = your_db user = xxxx password = yyyy" -sql "YENİLƏNİZ SET track_id = 1234 HARADA ogc_fid = (SEÇİN max (ogc_fid) FROM)"

pg_dump bir PostgreSQL verilənlər bazasının ehtiyat nüsxəsini çıxarmaq üçün bir yardım proqramıdır. Verilənlər bazası eyni vaxtda istifadə olunsa belə ardıcıl ehtiyat nüsxələri yaradır. pg_dump verilənlər bazasına daxil olan digər istifadəçiləri (oxucular və ya yazıçılar) bloklamır.

pg_dump yalnız bir verilənlər bazasını atır. Bütün bir klasterin ehtiyat nüsxəsini çıxarmaq və ya bir qrupdakı bütün verilənlər bazaları üçün ümumi olan qlobal obyektlərin (məsələn, rollar və masa boşluqları) nüsxəsini çıxarmaq üçün pg_dumpall istifadə edin.

Zibilliklər skript və ya arxiv fayl formatında çıxarıla bilər. Şrift dökümləri verilənlər bazasını saxlandığı andakı vəziyyətinə qaytarmaq üçün lazım olan SQL əmrlərini özündə cəmləşdirən mətn sənədləridir. Belə bir skriptdən bərpa etmək üçün onu psql-ə verin. Komut dosyaları, digər SQL verilənlər bazası məhsullarında da bəzi dəyişikliklərlə digər maşınlarda və digər arxitekturalarda verilənlər bazasını yenidən qurmaq üçün istifadə edilə bilər.

Verilənlər bazasını yenidən qurmaq üçün alternativ arxiv fayl formatları pg_restore ilə istifadə olunmalıdır. Pg_restore-un bərpa olunan şeylər barədə seçici olmasına, hətta bərpa edilmədən əvvəl maddələrin yenidən sıralanmasına imkan verirlər. Arxiv fayl formatları arxitekturalar arasında portativ olacaq şəkildə dizayn edilmişdir.

Arxiv fayl formatlarından biri ilə istifadə edildikdə və pg_restore ilə birləşdirildikdə, pg_dump çevik bir arxiv və ötürmə mexanizmi təmin edir. pg_dump bütün verilənlər bazasını ehtiyat nüsxəsi üçün istifadə edilə bilər, sonra pg_restore arxivi araşdırmaq və / və ya verilənlər bazasının hansı hissələrinin bərpa ediləcəyini seçmək üçün istifadə edilə bilər. Ən çevik çıxış fayl formatları “xüsusi” format (-Fc) və “qovluq” formatıdır (-Fd). Bütün arşivlenmiş maddələrin seçilməsinə və yenidən sıralanmasına imkan verir, paralel bərpasını dəstəkləyir və standart olaraq sıxılır. "Kataloq" formatı paralel zibillikləri dəstəkləyən yeganə formatdır.

Pg_dump işləyərkən, xüsusən aşağıda sadalanan məhdudiyyətlər nəzərə alınmaqla çıxarılan xəbərdarlıqları (standart səhvlə yazılmış) yoxlamaq lazımdır.


4.2. PostGIS Coğrafiya Növü

Coğrafiya növü, "coğrafi" koordinatlarda (bəzən "geodeziya" koordinatları və ya "lat / lon", ya da "lon / lat" olaraq adlandırılan) məkan xüsusiyyətləri üçün yerli dəstək təmin edir. Coğrafi koordinatlar bucaq vahidləri (dərəcələri) ilə ifadə olunan sferik koordinatlardır.

PostGIS həndəsə növü üçün əsas bir təyyarədir. Təyyarədəki iki nöqtə arasındakı ən qısa yol düz bir xəttdir. Yəni həndəsələr üzrə hesablamalar (sahələr, məsafələr, uzunluqlar, kəsişmələr və s.) Kartezyen riyaziyyatı və düz xətt vektorları ilə hesablana bilər.

PostGIS coğrafi tipinin əsası kürədir. Kürənin iki nöqtəsi arasındakı ən qısa yol böyük bir dairə qövsüdür. Bu o deməkdir ki, coğrafiyalardakı hesablamalar (sahələr, məsafələr, uzunluqlar, kəsişmələr və s.) Daha mürəkkəb riyaziyyatdan istifadə edərək kürə üzərində hesablanmalıdır. Daha dəqiq ölçmələr üçün hesablamalar dünyanın həqiqi sferoid formasını nəzərə almalıdır.

Əsas riyaziyyat daha mürəkkəb olduğundan, coğrafiya növü üçün həndəsə tipindən daha az funksiya təyin edilmişdir. Zaman keçdikcə yeni alqoritmlər əlavə olunduqca coğrafiya növünün imkanları genişlənəcəkdir.

Coğrafiya adlı bir məlumat tipindən istifadə edir. GEOS funksiyalarından heç biri coğrafiya tipini dəstəkləmir. Keçid yolu ilə həndəsə və coğrafiya növləri arasında irəli və geri çevrilə bilər.

PostGIS 2.2-dən əvvəl coğrafiya növü yalnız WGS 84 uzun lat (SRID: 4326) dəstəkləyirdi. PostGIS 2.2 və yuxarı üçün, məkan_ref_sys cədvəlində müəyyən edilmiş hər hansı bir uzun / lat əsaslı məkan istinad sistemi istifadə edilə bilər. Coğrafiya növü ilə izah edildiyi kimi öz xüsusi sferoid məkan istinad sisteminizi əlavə edə bilərsiniz.

Hansı məkan istinad sistemindən istifadə etməyinizdən asılı olmayaraq, ölçmə ilə qaytarılmış vahidlər (ST_Distance, ST_Length, ST_Perimeter, ST_Area) və ST_DWithin-in girişi üçün metrdir.

Coğrafiya növü PostgreSQL typmod tərif formatını istifadə edir ki, bir coğrafiya sahəsi olan bir cədvəl tək addımda əlavə olunsun. Döngələr xaricində bütün standart OGC formatları dəstəklənir.

4.2.1. Coğrafiya əsasları

Coğrafiya növü əyriləri, TINS ​​və ya POLYHEDRALSURFACE-ləri dəstəkləmir, lakin digər həndəsə növləri dəstəklənir. Standart həndəsə tipli məlumatlar, SRID 4326-ya aiddirsə, coğrafiyaya avtomatik toplayacaqdır. Məlumat daxil etmək üçün EWKT və EWKB konvensiyalarından da istifadə edə bilərsiniz.

POINT: 432 WGS 84 uzunluğuna görə srid göstərilmədiyi zaman 2D nöqtə coğrafiyası ilə bir cədvəl yaratmaq:

POINT: NAD83 longlat'da 2D nöqtəli coğrafiya ilə bir cədvəl yaratmaq:

Z koordinat nöqtəsi olan bir masa yaratmaq və açıq şəkildə srid göstərmək

Coğrafiya sahələri coğrafi_sütunlar sistem görünüşündə qeydiyyata alınır.

İndi "coğrafiya_ sütunları" görünüşünü yoxlayın və cədvəlinizin siyahıda olduğunu görün.

CREATE TABLE sintaksisindən istifadə edərək Coğrafiya sütunu ilə yeni bir cədvəl yarada bilərsiniz.

Yer sütununun GEOGRAPHY tipinə sahib olduğunu və coğrafiya növünün iki isteğe bağlı dəyişdiricini dəstəklədiyini unutmayın: sütunda icazə verilən forma və ölçülərin növünü məhdudlaşdıran bir tip dəyişdirici və koordinat istinad identifikatorunu müəyyən bir sayda məhdudlaşdıran bir SRID modifikatoru.

Növü dəyişdirici üçün icazə verilən dəyərlər bunlardır: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON. Dəyişdirici ayrıca şəkilçilər vasitəsilə ölçü məhdudiyyətlərini dəstəkləyir: Z, M və ZM. Beləliklə, məsələn, 'LINESTRINGM' modifikatoru yalnız üç ölçülü sətir sətirlərinə icazə verəcək və üçüncü ölçüyə ölçü kimi baxacaqdır. Eynilə, 'POINTZM' dörd ölçülü məlumat gözləyir.

Bir SRID təyin etməsəniz, SRID varsayılan olaraq 4326 WGS 84 uzun / lat istifadə ediləcək və bütün hesablamalar WGS84 istifadə edilərək davam edəcəkdir.

Cədvəlinizi yaratdıqdan sonra onu GEOGRAPHY_COLUMNS cədvəlində görə bilərsiniz:

Cədvələ bir GEOMETRY sütunundan istifadə etdiyiniz kimi məlumat daxil edə bilərsiniz:

İndeks yaratmaq GEOMETRY ilə eyni işləyir. PostGIS, sütun növünün Coğrafi olduğunu və GEOMETRY üçün istifadə edilən adi düzənlik indeksi əvəzinə uyğun bir sferaya əsaslı bir indeks yaratdığını qeyd edəcəkdir.

Sorğu və ölçmə funksiyaları sayğac vahidlərindən istifadə edir. Beləliklə, məsafə parametrləri metrlərlə ifadə edilməli və qayıdış dəyərləri metrlərlə (və ya sahələr üçün kvadrat metr) gözlənilməlidir.

Seattle-Londona uçan bir təyyarənin (LINESTRING (-122.33 47.606, 0.0 51.5)) Reykjavikə nə qədər yaxın olduğunu hesablayaraq Coğrafyanın gücünü hərəkətdə görə bilərsiniz (POINT (-21.96 64.15)).

Fərqli lon / lat layihələrinin sınağı. Spatial_ref_sys cədvəlində sadalanan hər hansı bir uzun lat məkan istinad sisteminə icazə verilir.

Coğrafiya növü, Reykjavik ilə Seattle və London arasındakı böyük dairə uçuş yolu arasındakı kürə üzərindəki ən qısa məsafəni hesablayır.

Great Circle mapper GEOMETRY tipi, Reykjavik ilə Seattle-London arasında düz bir dünya xəritəsində çəkilmiş düz xətt arasındakı mənasız bir kartezian məsafəsini hesablayır. Nəticənin nominal vahidlərinə "dərəcələr" deyilə bilər, lakin nəticə nöqtələr arasındakı həqiqi açı fərqinə uyğun gəlmir, buna görə də onları "dərəcə" adlandırmaq səhvdir.

4.2.2. Coğrafiya Məlumat növü Həndəsə məlumat növü üzərində nə zaman istifadə ediləcək

Coğrafiya növü məlumatları uzunluq / enlik koordinatlarında saxlamağa imkan verir, lakin bir xərc tələb edir: GEOGRAPHY-də GEOMETRY-də olduğundan daha az funksiya müəyyən edilir, bu funksiyaların yerinə yetirilməsi daha çox CPU vaxtı tələb edir.

Seçdiyiniz tip, qurduğunuz tətbiqetmənin gözlənilən iş sahəsi ilə şərtləndirilməlidir. Veriləriniz dünyanı və ya böyük bir kontinental ərazini əhatə edəcəkmi, yoxsa bir əyalət, ilçe və ya bələdiyyə üçün yerlidir?

Veriləriniz kiçik bir ərazidədirsə, uyğun bir proyeksiya seçmək və GEOMETRY istifadə etmək, mövcud performans və funksionallıq baxımından ən yaxşı həll yolu ola bilər.

Veriləriniz qlobal və ya bir qitə bölgəsini əhatə edirsə, Coğrafi məlumatların proyeksiya təfərrüatları barədə narahat olmayaraq bir sistem yaratmağınıza imkan verdiyini görə bilərsiniz. Verilərinizi uzunluq / enlikdə saxlayır və Coğrafiya mövzusunda müəyyən edilmiş funksiyalardan istifadə edirsiniz.

Proqnozları başa düşmürsənsə və bunları öyrənmək istəmirsinizsə və Coğrafi məlumatlarda mövcud olan məhdudiyyətləri qəbul etməyə hazırsınızsa, GEOMETRY-dən çox Coğrafiya istifadə etmək daha asan ola bilər. Sadəcə məlumatlarınızı uzunluq / enlik kimi yükləyin və oradan gedin.

Coğrafiya ilə Həndəsə arasında dəstəklənənləri müqayisə etmək üçün Bölmə 14.11, “PostGIS İşlev Dəstək Matrisası” na baxın. Coğrafiya funksiyalarının qısa siyahısı və təsviri üçün Bölmə 14.4-ə baxın, “PostGIS Coğrafiya Dəstək Funksiyaları”

4.2.3. Coğrafiya Ətraflı suallar

Kürə və ya sferoid hesablayırsınız?

Varsayılan olaraq, bütün məsafə və sahə hesablamaları sferoid üzərində aparılır. Yerli ərazilərdəki hesablama nəticələrinin yerli planar nəticələrlə yaxşı yerli proyeksiyalarla uyğun gəldiyini görməlisiniz. Daha böyük ərazilərdə sferoid hesablamalar proqnozlaşdırılan müstəvidə edilən hesablamadan daha dəqiq olacaqdır.

Bütün coğrafiya funksiyaları, son bir boole parametrini 'FALSE' olaraq təyin edərək kürə hesablamasından istifadə etmək seçiminə malikdir. Bu, xüsusən həndəsələrin çox sadə olduğu hallarda hesablamaları bir qədər sürətləndirəcəkdir.

Bəs tarix xətti və qütblər?

Bütün hesablamalarda tarix sətri və qütb anlayışı yoxdur, koordinatlar sferikdir (uzunluq / enlik), beləliklə tarix xəttini kəsən bir forma hesablama nöqteyi-nəzərindən başqa heç bir formadan fərqlənmir.

İşləyə biləcəyiniz ən uzun yay nədir?

İki nöqtə arasındakı "interpolasiya xətti" olaraq böyük dairə qövslərindən istifadə edirik. Bu o deməkdir ki, böyük dairə boyunca hansı istiqamətə getməyinizə görə iki nöqtə həqiqətən iki yolla birləşir. Bütün kodlarımız nöqtələrin böyük dairə boyunca iki yolun * daha qısa * ilə birləşdiyini düşünür. Nəticə etibarilə qövsləri 180 dərəcədən çox olan formalar düzgün şəkildə modelləşdirilməyəcəkdir.

Avropa / Rusiya ərazisini hesablamaq / buraya böyük coğrafi bölgəni daxil etmək niyə bu qədər sürətlidir?

Çünki çoxbucaqlı çox cəsarətlidir! Böyük sahələr iki səbəbə görə pisdir: hüdudları böyükdür, buna görə də göstərici köşələrin sayına görə hansı sorğu keçirməyinizdən asılı olmayaraq xüsusiyyəti çəkməyə meyllidir və testlər (məsafə, saxlama) vertex siyahısını ən azı bir dəfə keçməlidir və bəzən N dəfə (N digər namizəd xüsusiyyətindəki zirvələrin sayı ilə).

GEOMETRY-də olduğu kimi, çox böyük poliqonlara sahib olduğunuzda, ancaq kiçik ərazilərdə sorğu etdiyiniz zaman, həndəsi məlumatlarınızı daha kiçik hissələrə "normallaşdırdığınızı" tövsiyə edirik ki, indeks obyektin hissələrini effektiv şəkildə soruşa bilsin və sorğular belə olmasın. hər dəfə bütün obyekti çıxarmaq. Xahiş edirəm ST_Subdivide funksiyası sənədlərinə müraciət edin. Bütün Avropanı bir çoxbucaqda saxlaya biləcəyiniz * etməlisiniz * demək deyil.


Sıfırdan Maliyyə Məlumat Zaman Seriyası Verilənlər Bazası yaratmaq

İnsanları tamamilə silahlandıracağına və ehtimal ki, insanların mənə hücum etməsinə səbəb olacağına şübhə etmədiyim bir şey tövsiyə edirəm. Keçmişdə belə oldu və insanlar cavabımı aşağı salan kimi StackOverflow-da çox xal itirdim. Əlbətdə ki, insanların kvant forumunda fikirləri daha açıqdır.

Qeyd - Görünür ki, bu təklif yenidən güclü bir fikir ayrılığı yaratdı. Bunu oxumadan əvvəl qeyd etmək istərdim ki, bu təklif kütləvi bir çox istifadəçi sistemi deyil, "Kiçik alış yan firması" üçündür.

7 ili yüksək tezlikli ticarət əməliyyatını idarə etdim və əsas diqqətimiz bu kimi sistemlər qurmaq idi. Həm NYSE, NASDAQ, həm də müxtəlif ECN-lərdən sifariş səviyyəsi məlumatlarını saxlamaq, almaq və təhlil etməyin ən səmərəli yolunu tapmaq üçün çox vaxt sərf etdik. Sizə verdiyim şey o işin nəticəsidir.

Cavabımız belə oldu Bir verilənlər bazası istifadə etməyin. Seriallaşdırılmış məlumat hissələrinin əsas quruluşlu bir fayl sistemi daha yaxşı işləyir. Bazar vaxtı seriyası məlumatları həm istifadəsi, həm də saxlanması baxımından bir çox cəhətdən bənzərsizdir. Verilənlər bazaları olduqca fərqli ehtiyaclar üçün hazırlanmışdır və həqiqətən çalışdığınız işin performansına zərər verir.

Bu, ticarət strategiyaları və ya risk analitikləri ilə əlaqəli məlumat analizinə yönəlmiş kiçik və orta ölçülü ticarət əməliyyatı kontekstindədir. Böyük bir broker, bank üçün bir həll yaradırsınızsa və ya çox sayda eyni vaxtda müştərinin ehtiyaclarını ödəmək məcburiyyətindəsinizsə, düşünürəm ki, həll yolunuz mənimlə fərqlənəcəkdir.

Veritabanlarını sevirəm. Biz MongoDB-nı opsion ticarətini təhlil etməyimizə imkan verən yeni bir layihənin bir hissəsi üçün istifadə edirəm, amma 16 illik seçim məlumatları da daxil olmaqla bazar vaxtı göstəricilərim məlumatları hamısı strukturlaşdırılmış bir fayl mağazasına yerləşdirilib.

Gəlin bunun səbəbini və bunun daha çox performans göstərdiyini izah edim.

Əvvəlcə məlumatların saxlanmasına baxaq. Verilənlər bazaları bir sistemin məlumatlarla çox müxtəlif işlər görməsinə imkan verəcək şəkildə hazırlanmışdır. Əsas CRUD funksiyaları Yaradın, Oxuyun, Yeniləyin və Silin. Bunları effektiv və təhlükəsiz etmək üçün bir çox yoxlama və təhlükəsizlik mexanizmi tətbiq olunmalıdır. Verilənləri oxumadan əvvəl verilənlər bazası məlumatların dəyişdirilmədiyindən əmin olmalı, koordinasiyaların yoxlanılmasıdır və s. Verilənlər bazasındakı məlumatları oxuduğunuz zaman server bu məlumatların keşləşdirilməsi və müəyyənləşdirilməsi üçün çox səy göstərir. sonra daha sürətli verilə bilər. İndeksləmə əməliyyatları və müxtəlif yollarla görünməyə hazırlaşmaq üçün məlumatların təkrarlanması var. Verilənlər bazası dizaynerləri bu funksiyaları sürətli dizayn etmək üçün çox səy sərf etdilər, lakin hamısı işləmə vaxtını alır və istifadə edilmədikləri təqdirdə yalnız bir maneədir.

Bazar zaman seriyası məlumatları tamamilə fərqli bir şəkildə saxlanılır. Əslində depolamaqdansa hazırlandığını deyərdim. Hər bir məlumat elementinin yalnız bir dəfə yazılması lazımdır və bundan sonra heç vaxt dəyişdirilməyə və dəyişdirilməyə ehtiyac yoxdur. Məlumat elementləri ardıcıllıqla yazıla bilər, ortasına bir şey əlavə etməyə ehtiyac yoxdur. Heç bir turşu funksiyasına ehtiyac yoxdur. Başqa məlumatlara istinadları azdır. Zaman seriyası effektiv olaraq öz işidir.

Verilənlər bazalarını ecazkar edən bütün sehrləri bir verilənlər bazası etdiyinə görə baytları da paketləyir. Minimum yer məlumatları öz orijinal ölçüsüdür. Normallaşdırma məlumatları və sıxılma ilə bəzi fəndlər oynaya bilərlər, ancaq bunlar yalnız bu günə qədər gedib işləri ləngidir. Verilənlərin indeksləşdirilməsi, önbelleğe alınması və istinad edilməsi, baytlara yığma və anbarın çeynənməsi ilə nəticələnir.

Oxumaq da çox sadələşdirilmişdir. Məlumat tapmaq zaman və amp rəmzi qədər sadədir. Kompleks indeksləşdirmə heç bir fayda vermir. Zaman seriyası məlumatları bir qayda olaraq xətti bir şəkildə və ardıcıl bir yığın şəklində oxunduğundan, Keşləmə strategiyaları kömək əvəzinə çıxışı yavaşlatır. Tezliklə bir daha oxumayacağınız məlumatları önbelleğe almaq üçün prosessor dövrləri lazımdır.

Bu bizim üçün işləyən əsas strukturlardır. Veriləri seriallaşdırmaq üçün əsas məlumat strukturlarını yaratdıq. Əsas narahatlığınız sürət və məlumat ölçüsüdürsə, sadə bir ikili saxlama ilə gedə bilərsiniz. Başqa bir cavabda, omencat, TeaFiles-dən istifadə etməyi təklif etdi və bunun da bir vəd verdiyi görünür. Son ehtiyacımız daha çox elastiklikdir, buna görə kifayət qədər sıx, lakin çevik bir JSON formatından istifadə etməyi seçdik.

Veriləri kifayət qədər aşkar hissələrə ayırdıq. EOD stok məlumatları çox asan bir nümunədir, lakin konsepsiya daha böyük məlumat dəstlərimiz üçün də işləyir.

Veriləri təhlil üçün kifayət qədər ənənəvi zaman seriyası ssenarilərində istifadə edirik. Buna bir sitat kimi istinad edilə bilər və ya hər dəfə bir neçə illik məlumatları ehtiva edən bir sıra. Verilənləri saxlama üçün ısırık ölçülü hissələrə ayırmaq vacib idi, buna görə məlumatlarımızın bir "Blokunu" bir illik EOD stok zaman seriyası məlumatlarına bərabər etməyi seçdik. Hər blok JSON olaraq seriyalaşdırılmış bir illik OHLC EOD məlumatlarını ehtiva edən bir sənəddir. Faylın adı alt sətirlə əlavə edilmiş Səhmdar simvoludur. Qeyd - alt simvol COM və ya PRN kimi DOS əmrləri ilə ziddiyyət təşkil edən zaman problemlərin qarşısını alır.

Qeyd, fayl sisteminizin məhdudiyyətlərini başa düşdüyünüzdən əmin olun. Bir yerə çox fayl qoyduğumuzda çətinlik çəkdik. Bu, öz indeksini təsirli bir qovluq quruluşuna gətirib çıxardı. Verilərin ilinə görə bölünür və daha sonra stok simvolunun ilk hərfinə görə sıralanır. Bu, hər qovluq üçün təxminən 20 ilə bir neçə yüz simvol faylı verir. Təxminən buna bənzəyir

2015-ci il üçün AAPL məlumatları olacaqdır

Məlumat faylının kiçik bir hissəsi buna bənzəyir

Yalnız bir neçə sətirdə hər hansı bir məlumat sorğusu üçün bizə fayl adlarının siyahısını verə bilən bir yönləndirici obyektimiz var. Hər bir fayl Async filestream ilə oxunur və sıradan çıxarılır. Hər bir təklif bir Obyektə çevrilir və sistemdəki sıralanmış bir siyahıya əlavə olunur. O anda lazımsız məlumatları kəsmək üçün çox sürətli bir sorğu edə bilərik. Məlumatlar indi yaddaşdadır və demək olar ki, istənilən şəkildə istifadə edilə bilər.

Sorğu ölçüsü kompüteri idarə edə bilməyəcək qədər böyüyərsə, prosesi silmək çətin deyil. Oraya çatmaq üçün böyük bir istək lazımdır.

Bunu təsvir etdiyim proqramçılarım var idi ki, az qala hirslənsinlər ki, necə səhv etdiyimi izah etdim. Bunun "Öz məlumat bazamın yayılması" və tamamilə vaxt itkisi olması idi. Əslində, olduqca inkişaf etmiş bir verilənlər bazasından keçdik. Bunu idarə etmək üçün kod bazamızı etdikdə kiçik bir ovuc sinifə düşdü və verilənlər bazası həllini idarə etmək üçün istifadə etdiyimiz kodun 1/4-dən azına düşdük. Ayrıca sürətdə təxminən 100x sıçrayış əldə etdik. Bir neçə milisaniyədə 20 simvol üçün 7 illik gün sonu məlumatlarını əldə edə bilərəm.

Köhnə HF ticarət sistemimiz oxşar konsepsiyalardan istifadə edirdi, lakin olduqca optimallaşdırılmış bir Linux mühitində və nanosaniyələr aralığında işləyirdi.

Yuxarıdakı bütün cavablar (təəssüf ki, bu məqamda yüksək səslə səsləndirilib) məqamı əskikdir. Ümumi performans göstəricilərinə görə DBMS və ya saxlama həllini seçməməlisiniz, istifadə vəziyyətinə görə seçməlisiniz. Əgər kimsə "x ms oxundu", "saniyədə" y "əlavə edir", "k dəfə sürətlənir", "n TB məlumatını saxlayır" və ya "bir illik təcrübəm var" deyirsə və bunu sizə təklifi əsaslandırmaq üçün istifadə etsəniz, don o adama güvənməyin.

Yuxarıda təklif olunan həllərin hər biri üçün ümumi bir qırılma nöqtəsini təsvir edə bilərəm:

Düz fayllar: Bir çox müştəri tətbiqetməyə başladığınızda bu kiçik bir fikirdir, kiçik bir komandanız var, və / və ya bu məlumatlara real vaxt rejimində daxil olmalısınız. Kiçik bir komanda da heterojen serverlərdə eyni zamanda məlumatları çəkən yüzlərlə prosesə sahib ola bilər, beləliklə məlumatlarınızı düz fayllarda saxlayır və paralel girişi idarə etmək üçün öz tətbiqlərinizə güvənirsinizsə, bunu bir hardware və ya fayl sistemi problemi halına gətirirsiniz. 10-20 yaşlı RDBMS-lər belə bunu idarə etmək üçün kifayət qədər layiqli bir iş görürlər ki, bu da öz inkişaf etdiricilərinizin təkrarlanması üçün qeyri-adi vaxt tələb edəcəkdir. Şəbəkə giriş / çıxarma hüdudları və ya fayl sistemi məhdudiyyətləri ilə məşğul olmaq üçün aşağı səviyyəli paralel proqram yazmaq demək olar ki, həmişə bir klaster verilənlər bazasını necə tətbiq edəcəyinizi və ya açıq mənbə alətləri ilə qırmaqdan daha bahalıdır və kiçik bir komandanız varsa, geliştiricinizin vaxtı bir fayl sorğu sürətindən sonsuz dərəcədə daha qiymətlidir. Veri mağazasına qarşı geri test etməyi planlaşdırdığınızı söylədiniz - Bəli, sürətli bir SSD-də düz bir sənədli bir serverdə 500 MB / s-dən 2 GB / s-ə (saniyədə milyonlarla giriş, sərin!) Backtest edə bilərsiniz. , ancaq bunu düz fayllarla ölçmək qeyri-mənfi bir şeydir.

Sütuna yönəlmiş zaman seriyası verilənlər bazası: Əksər insanlar müasir verilənlər bazası optimallaşdırmalarını sütun yönümlü üstünlüklərlə səhv salırlar. Daha müasir DBMS-lərin ağıllı paralel radix hash birləşmələri, SIMD əsaslı toplama əməliyyatları və sürətlənməsini izah edən bəyənmələr var. Deyək ki, nəzəri olaraq bir sıra yönümlü DBMS hər zaman yazma sürətində bir sütun yönümlü DBMS-ni üstələməlidir, lakin əksini bir çox etalonda görərdiniz, çünki bir çox sütun yönümlü DBM-də metadata istehsalını təxirə salmaq və ya indeksləri qorumaq üçün daha müasir yollar var. Sonda sütun yönümlüdür

mən. Demək olar ki, həmişə pis bir fikir tamamilə həyata keçir qeydləriniz erkən. Məsələn, yalnız saxladığınızı düşünək və yalnız $ [a, b] $ vaxt aralığındakı bütün sütunları seçirsiniz, çünki araşdırma təhlili aparırsınız və $ f (best bid, best ask) $ funksiyası ilə işləmək istədiyinizi bilmirsiniz. . Birincisi, $ mathbb içərisində ardıcıl olaraq vaxt keçməyin (fərqli olaraq saxlanılan) önbellek üstünlüyü(n) $, indeks B ağacından $ mathbb içində göstəriciləri qovmaq üçün alqoritmik üstünlüyünü itirir( log n) $. Sütun yönümlü DBMS memarlarının əksəriyyəti bunun fərqindədir və sorğu bu qanunauyğunluqla gedərsə, indeksə geri dönmək üçün sorğu optimallaşdırıcılarını tətbiq edirlər, buna görə burada həm satır yönümlü, həm də sütun yönümlü DBMS bərabər şəkildə uyğunlaşdırılır. Fəqət maddiləşdirmə mərhələsində sütun yönümlü DBMS hələ də ayrı sütunları yenidən sıraya yönəlmiş qeydlərə salmaq məcburiyyətində qalır, halbuki sıra yönümlü DBMS məlumatları yalnız saxlama qaydasında yazır və nəzəriyyədə daha sürətli olmalıdır.

ii. Sorğunuz üçün seçim dəstləri ümumiyyətlə azdırsa, əhəmiyyətsizdir. Ən böyük darlıq bir disk sektorunun yaddaşa yüklənməsidir. Seçmə dəstiniz kiçikdirsə, sütun yönümlü və ya sıra yönümlü tərtibindən asılı olmayaraq hamısı eyni (az) sektorda yerləşir, buna görə sütun yönümlü tərtibdə ilk sifariş sürət üstünlüyü yoxdur.

iii. Üçüncü tərəf dəstəyinə ehtiyacınız varsa, bahadır. Yalnız bir neçə istehsal gücü sütun yönümlü DBMS-lər var və burada sizə kömək edəcək bir podratçı almaq MySQL-də pulsuz keyfiyyətli yardım almaqdan daha bahalıdır. Verilənlər bazasına abunə olan real vaxt tətbiqetmələrini istəyirsinizsə, bahalı bir kommersiya həllinə ehtiyacınız var, çünki bütün açıq mənbəli seçimlərin bu cür işləmə qabiliyyətinə zəif dəstəyi var.

NoSQL: Tutaq ki, birləşməyə qərar verən 2 şirkətiniz var, bu gündəlik dənəvərliyə baxdığınız üçün çox olur. Bunu idarə etmək üçün fərqli konvensiyalar var, amma indi hər iki şirkətlə əlaqəli qazancları necə yeniləyirsiniz? MongoDB-də heç bir kaskad üslubunda bir məlumat modeli yoxdur, buna görə indi işi verilənlər bazası səviyyəsindən tətbiq səviyyəsinə yüklə. Bu, bir neçə səbəbə görə pis ola bilər, (1) şansınız budur ki, bu tapşırığı sizin üçün yerinə yetirmək üçün bir analitikə verin, şemanın sizin üçün bütövlüyünü təmin etməsinə icazə verməkdən daha çox qarışıqlığa meylli, (2) saxlanması çətin olan JSON sənədlərinizdəki müəyyən sahələri yeniləmək üçün istifadə halına xüsusi kod yazmaq üçün, (3) yuxarıda təklif olunan MongoDB, kifayət qədər səmərəsiz bir serializasiya formatına (BSON) malikdir və demək olar ki, aşağıdakı tətbiqləriniz alınacaq bir nöqtədə BSON kitabxanası tərəfindən dar.

Budur nə etməyinizi məsləhət görürəm: PostgreSQL ilə tanış olun, çünki onsuz da tanışsınız, şemanızı gələcək hər hansı bir həll yolu üçün məlumatlarınızı köçürməyiniz üçün asan bir şəkildə tərtib edin, daha konkret bir həll istəmədən əvvəl istifadə vəziyyətlərinizin performans darlıqlarının harada olduğunu müəyyənləşdirin.


İkincil indeks

DBMS-də ikincil İndeks hər qeyd üçün unikal bir dəyəri olan bir sahə tərəfindən yaradıla bilər və namizəd açarı olmalıdır. Kümelenmeyen bir indeks olaraq da bilinir.

Bu iki səviyyəli verilənlər bazası indeksləmə texnikası birinci səviyyə xəritələşdirmə ölçüsünü azaltmaq üçün istifadə olunur. Birinci səviyyə üçün böyük bir sıra aralığı seçilir, buna görə Xəritəçəkmə ölçüsü həmişə kiçik qalır.

İkincil indeksləşdirmə nümunəsi

Bir verilənlər bazası indeks nümunəsi ilə ikincil indeksləşdirməyi başa düşək:

Bir bank hesabı verilənlər bazasında məlumatlar ardıcıl olaraq acc_no tərəfindən saxlanılır, ABC bankının müəyyən bir filialının bütün hesablarını tapmaq istəyə bilərsiniz.

Burada hər axtarış açarı üçün DBMS-də ikincil bir indeks ola bilər. İndeks qeydləri, xüsusi axtarış açarı dəyəri ilə bütün qeydlərə işarə edən bir vedrə üçün bir qeyd nöqtəsidir.


Verilənlər Bazası İdarəetmə Xüsusiyyətləri

AutoCommit (boolean)

DBI tərəfindən təklif olunan DBD :: Pg tərəfindən dəstəklənir. DBI təsnifatına görə, PostgreSQL bir əməliyyatın açıq şəkildə başlamalı olduğu bir verilənlər bazasıdır. Bir əməliyyata başlamadan, verilənlər bazasında edilən hər dəyişiklik dərhal qalıcı olur. AutoCommit-in varsayılanı açıqdır, lakin bu gələcəkdə dəyişə bilər, buna görə & quotconnect & quot çağırarkən bunu açıq şəkildə qurmanız tövsiyə olunur. Ətraflı məlumat üçün bu sənədin digər yerindəki & quotƏməliyyatlar & quot; haqqında qeydlərə baxın.

ParamValues (hash ref, salt oxunur)

Bir do metodu çağırışı içərisində olmadıqda nəzərə alınmır. Xaricdən görünməyən bir daxili hazırlama / icra / gətirmə rutininin içindəki müvəqqəti bəyanat sapından ParamValues ​​qarışığına müvəqqəti olaraq yalnış qoyulur və müvafiq olaraq işlənir (baxın & quot; Bəyanat Dəstəyi Atributları & quot-də ParamValues). Bu, sorğu uğursuz olarsa, yer tutuculara zəng edənə verilən dəyərlərin düzgün hesabat verilməsinə imkan verir (bax ShowErrorStatement).

Pg_bool_tf (boolean)

DBD :: Pg xüsusi atribut. Doğru olarsa, boole dəyərləri & # 391 & # 39 və & # 390 & # 39 əvəzinə & # 39t & # 39 və & # 39f & # 39 simvolları kimi qaytarılır.

Yalnız oxuyun (boolean)

Cari verilənlər bazası bağlantısının yalnız oxunuş rejimində olub-olmamasını müəyyənləşdirir. Bu rejimdə verilənlər bazasını dəyişdirən dəyişikliklərə icazə verilmir və bir səhv atacaq. Qeyd: bu metod olacaq yox & quotAutoCommit & quot doğrudursa işləyin. Yalnız oxunma effekti yalnız hər başlanğıcdan sonra SET ƏMƏLİYYATINI OKUMA göndərərək həyata keçir. Daha ətraflı məlumat üçün baxın:

Xahiş edirəm bu metodun dözülməz olmasın: verilənlər bazasını yeniləməyin hələ də yolları var. INSERT, UPDATE və ya DELETE kimi əmrlər verməməli tətbiqləri tutmaq üçün bu təhlükəsizlik şəbəkəsini nəzərdən keçirin.

Bu metod DBI 1.55 və ya daha yaxşı versiyasını tələb edir.

Pg_server_prepare (boolean)

DBD :: Pg xüsusi atribut. DBD :: Pg-nin server tərəfdən hazırlanmış ifadələrdən istifadə etməyə çalışmalı olub olmadığını göstərir. Varsayılan dəyər, true, hazırlanan ifadələrin mümkün olduqda istifadə edilməli olduğunu göstərir. Daha çox məlumat üçün & quotprepare & quot metodu bölməsinə baxın.

Pg_switch_prepared (tam)

DBD :: Pg xüsusi atribut. DBD :: Pg'nin daxili olaraq PQexecParams istifadə etməkdən PQexecPrepared-ə keçəcəyini göstərir. Başqa sözlə, server tərəfdən hazırlanmış hesabatları istifadə etməyə başlayacağı zaman (onlar üçün bütün digər tələblərin yerinə yetirildiyini fərz etməklə). Varsayılan dəyər 2, hazırlanmış bir ifadənin hazırlanacağı və ikinci və sonrakı vaxt icra edilməsinə istifadə ediləcəyi deməkdir. Həmişə PQexecParams yerinə PQexecPrepared istifadə etmək üçün pg_switch_prepared'ı 1 olaraq təyin edin (bu, əvvəlki versiyalardakı standart davranış idi). Pg_switch_prepared-in 0-a qoyulması DBD :: Pg-ni daima PQexecParams istifadə etməyə məcbur edəcəkdir.

Pg_placeholder_dollaronly (boolean)

DBD :: Pg xüsusi atribut. Varsayılanlar yalan. Doğru olduqda, ifadələrin içindəki sual işarələri yer tutucu kimi qəbul edilmir. Həndəsi operatorlar kimi alınmayan sual işarələrini ehtiva edən ifadələr üçün faydalıdır. Diqqət yetirin ki, yer tutucu kimi qəbul edilməməsi üçün sual işarələrindən ters eğiklə qaça bilərsiniz.

Pg_placeholder_nocolons (boolean)

DBD :: Pg xüsusi atribut. Varsayılanlar yalan. Doğru olduqda, ifadələrin içindəki iki nöqtə yer tutucu kimi qəbul edilmir. Bir sıra dilimini ehtiva edən ifadələr üçün faydalıdır. Yer tutucu kimi qəbul edilməməsi üçün birbaşa yoğun bağırsağın önünə arxa əyik də yerləşdirə bilərsiniz.

Pg_enable_utf8 (tam)

DBD :: Pg xüsusi atribut. Bu bayraqla əlaqəli DBD :: Pg davranışı, 3.0.0 versiyasından etibarən dəyişdi. Bu atribut üçün -1 dəyər, DBD :: Pg-yə UTF8-ə, client_encoding UTF8 olaraq təyin olunduğu təqdirdə verilənlər bazasından geri gələn bütün strings kodunu bildirir. Bu defoltun istifadəsi çox tövsiyə olunur. Kodunuz əvvəllər pg_enable_utf8 istifadə edirdisə, ehtimal ki, onun qeydini tamamilə silə bilərsiniz.

Bu atribut 0 olaraq təyin olunarsa, DBD :: Pg olacaqdır heç vaxt UTF8 kodunu açmaq, mövcud müştəri kodlaşdırmasından asılı olmayaraq məlumatları qaytardı.

Bu atribut 1-ə qoyulubsa, DBD :: Pg olacaqdır həmişə UTF8-dekodlaşdırma cari client_encoding-dən asılı olmayaraq (bayt məlumatları istisna olmaqla) qaytarılan məlumatları verdi.

Client_encoding dəyərinin yalnız əlaqə vaxtında yoxlanıldığını unutmayın. Müştəri kodlamasını birləşdirdikdən sonra & # 39UTF8 & # 39 olaraq dəyişdirsəniz, DBD :: Pg-ni yeni müştəri kodlamasında oxumağa məcbur etmək üçün müvafiq olaraq hərəkət etmək üçün pg_enable_utf8'ı -1 olaraq təyin edə bilərsiniz.

Pg_errorlevel (tam)

DBD :: Pg xüsusi atribut. Server tərəfindən göndərilən məlumatların miqdarını təyin edir səhv mesajları. Düzgün girişlər 0, 1 və 2-dir. Başqa hər hansı bir nömrə 1-in standart dəyərinə məcbur ediləcəkdir.

0 (& quotTERSE & quot) dəyəri yalnız şiddəti, əsas mətni və mövqeyi göstərəcək və ümumiyyətlə bir sətirdə yerləşəcəkdir. 1 (& quotDEFAULT & quot) dəyəri də hər hansı bir detal, ipucu və ya kontekst sahələrini göstərəcəkdir. 2 (& quotVERBOSE & quot) dəyəri mövcud olan bütün məlumatları göstərəcəkdir.

Pg_lib_version (tam ədədi, yalnız oxunur)

DBD :: Pg xüsusi atribut. PostgreSQL-in DBD :: Pg-nin hansı versiyasına qarşı tərtib edildiyini göstərir. Başqa sözlə, hansı kitabxanalardan istifadə edilmişdir. 8.1.4 versiyası ilə birlikdə böyük, kiçik və düzəliş edilmiş bir ədədi qaytarır, 80104 olaraq qaytarılır.

Pg_server_version (tam ədədi, yalnız oxunur)

DBD :: Pg xüsusi atribut. Mövcud verilənlər bazası idarəedicisinin hansı PostgreSQL versiyasına qoşulduğunu göstərir. 8.0.1 versiyası ilə birlikdə böyük, kiçik və düzəliş edilmiş bir ədədi qaytarır.

Ad (simli, yalnız oxunur)

Cari verilənlər bazasının adını qaytarır. Bu & quotdbi: Pg: & quot hissəsi olmadan DSN ilə eynidir. 2.0.0 versiyasından əvvəl, bu yalnız açıq verilənlər bazası adını qaytardı (məs. & # 39foo & # 39). 2.0.0 versiyasından etibarən daha doğru çıxışı qaytarır (məs. & # 39dbname = foo & # 39)

İstifadəçi adı (simli, yalnız oxunur)

Verilənlər bazasına qoşulmuş istifadəçinin adını qaytarır.

Pg_db (simli, yalnız oxunur)

DBD :: Pg xüsusi atribut. Cari verilənlər bazasının adını qaytarır.

Pg_user (simli, yalnız oxunur)

DBD :: Pg xüsusi atribut. Serverə qoşulmuş istifadəçinin adını qaytarır.

Pg_host (simli, yalnız oxunur)

DBD :: Pg xüsusi atribut. Cari server bağlantısının hostunu qaytarır. Yerli əlaqəli hostlar boş bir simli qaytaracaqdır.

Pg_port (tam ədədi, yalnız oxunur)

DBD :: Pg xüsusi atribut. Bağlantı limanını serverə qaytarır.

Pg_socket (tam ədədi, yalnız oxunur)

DBD :: Pg xüsusi atribut. Bağlantı yuvasının fayl təsviri nömrəsini serverə qaytarır.

Pg_pass (simli, yalnız oxunur)

DBD :: Pg xüsusi atribut. Serverə qoşulmaq üçün istifadə olunan parolu qaytarır.

Pg_options (simli, yalnız oxunur)

DBD :: Pg xüsusi atribut. Serverə ötürülən əmr sətri seçimlərini qaytarır. Boş bir simli ola bilər.

Pg_default_port (tam ədədi, yalnız oxunur)

DBD :: Pg xüsusi atribut. Heç biri xüsusi verilmədiyi təqdirdə istifadə edilən standart portu qaytarır.

Pg_pid (tam ədədi, yalnız oxunur)

DBD :: Pg xüsusi atribut. Bağlantı ilə işləyən arxa server prosesinin proses kimliyini (PID) qaytarır.

Pg_prepare_now (boolean)

DBD :: Pg xüsusi atribut. Varsayılan deaktivdir. Doğrudursa, & quotprepare & quot metodu ilk icraya qədər gözləmək əvəzinə dərhal əmrlər hazırlayacaqdır.

Pg_expand_array (boolean)

DBD :: Pg xüsusi atribut. Varsayılanlar doğrudur. Yanlış olduqda, serverdən qaytarılan massivlər Perl arrayref olaraq dəyişdirilməyəcək, lakin simli olaraq qalacaq.

Pg_async_status (tam ədədi, yalnız oxunur)

DBD :: Pg xüsusi atribut. Asenkron bir əmrin cari vəziyyətini qaytarır. 0, asinxron əmrin getmədiyini, 1 asenkron əmrin başladığını və -1 asenkron əmrin ləğv edildiyini göstərir.

Pg_standard_conforming_strings (boolean, yalnız oxunur)

DBD :: Pg xüsusi atribut. Server hazırda standart uyğun simlərdən istifadə edirsə, doğru qayıdır. Yalnız hədəf server 8.2 və ya daha yaxşı versiya olduqda mövcuddur.

Pg_INV_READ (tam ədədi, yalnız oxunur)

Pg_INV_WRITE (tam ədədi, yalnız oxunur)

Sürücü (sap, yalnız oxunur)

Ana sürücünün sapını tutur. Bunun üçün yalnız tövsiyə olunan istifadə, sürücünün adını tapmaqdır:

Pg_protocol (tam ədədi, yalnız oxunur)

DBD :: Pg xüsusi atribut. PostgreSQL serverinin versiyasını qaytarır. DBD :: Pg versiyanı anlaya bilmirsə, & quot0 & quot olaraq dönər. Əks təqdirdə, & quot3 & quot; qaytarılır.

RowCacheSize


4 Cavablar 4

Mən çalışdığımların heç biri böyük masalarda işləmədiyi üçün məlumat üçün heç bir üçüncü vasitə istifadə etmədim. SSIS belə uğursuz oldu. Baxmayaraq ki, sxem üçün bir ticarət alətindən istifadə etdim. Beləliklə mənim dönüşüm prosesi belə oldu:

    şemanı kopyalamaq (məlumat yoxdur).
  1. pg_dump məlumatları Postgres-dən "düz mətn" formatında ixrac etmək; bu, əsasən sekmeyle ayrılmış dəyərlər (TSV) faylıdır.
  2. Python skriptlərini ixrac olunan faylları bir bcp formatına çevirmək üçün başa düşərdim.
  3. bcp məlumatları MSSQL-ə idxal etmək.

Dönüşüm addımı, pg_dump və bcp tərəfindən istifadə olunan formatlardakı bəzi fərqlərə diqqət yetirdi, məsələn:

  • pg_dump, faylın başlanğıcına bəzi Postgres-ə məxsus bəzi şeylər qoyur və məlumatları "." ilə bitirir, bcp isə bütün faylın məlumat ehtiva etməsini gözləyir.
  • pg_dump NULL dəyərlərini " N" kimi saxlayır, bcp bir NULL əvəzində heç bir şey gözləmir (yəni sütun ayırıcılar arasında məlumat yoxdur)
  • pg_dump sekmeleri " t" və yeni satırları " n" kimi kodlayır, bcp bunları sözün əsl mənasında qəbul edir
  • pg_dump həmişə nişanlar və yeni xətlər ayırıcı kimi istifadə edir, bcp isə istifadəçiyə ayırıcılar təyin etməyə imkan verir. Bu, kodlaşdırılmadığından, məlumatlarda hər hansı bir sekmə və ya yeni xətt varsa, bu vacib olur.

Postgres-də yaxşı olan bəzi unikal məhdudiyyətlərin MSSQL-də pozulduğunu da gördüm, buna görə onları buraxmalı oldum. Bunun səbəbi MSSQL-də NULL = NULL (yəni. NULL unikal dəyər kimi qəbul edilir), Postgres-də deyil.

SQL 2005 qutunuzda quraşdırılmış uyğun Postgres dəstək sürücüləriniz varsa (və ya Postgres'i ODBC vasitəsilə istifadə etmək istəsəniz və ya Postgres-dən bir dosyaya atmaq və oradan idxal etmək istəsəniz) SQL Server-də idxal / ixrac sehrbazından istifadə edə bilərsiniz. məlumatları kopyalamaq üçün sifariş. Bu sizə müxtəlif suallar verəcək və sonra uyğun toplu daxiletmə əməliyyatlarından istifadə edərək SQL Server İnteqrasiya Xidmətləri (SSIS) paketi işi kimi idxalatı həyata keçirəcəksiniz.

Ancaq bu sehrbaz bir seçim deyilsə, çox sayda sətir olmasına baxmayaraq, satırların fərdi ölçüsünün & lt orta hesabla 135 bayt olduğunu və 50 GB əməliyyatın baş verməsi üçün kifayət qədər əməliyyat log sahəsi verildiyini nəzərə almağa dəyər. " sadə insert 'ifadələrinin özləri də söz mövzusu deyil.

Gedirsən :) Təəssüf ki, biraz bahalıdır.

Təxminən 10 il keçdi və bu hələ düz bir məsələ deyil. Hibrid bir həll ilə başa çatdım, aşağıdakı əmrdən istifadə edərək şema və cədvəl / sütun şərhlərini ixrac edərək öz şema eşleyicimi yuvarladım:

Sonra şemanı T-SQL-ə çevirən bir PHP skriptini yazdım. Daha sonra, satırların həqiqi idxalını etmək üçün aşağıdakı 3-cü proqramı istifadə etdim (mənsubiyyət yoxdur):

Bir az yavaş idi, amma indiyə qədər çox yaxşıdır. Verilənlər bazamız sizinkindən daha kiçik idi, yalnız 15 GB idi, ancaq bu vasitə yaxşı işləyirdi. Bu da təxminən 50 dollar tapa bildiyim ən ucuzu idi. İndiyə qədər investisiya edərkən bir dəyər qazandı.


7 Cavablar 7

Postgresql, postgres adlı standart bir istifadəçi yaradır, buna görə standart istifadəçi olaraq daxil olun və yeni bir istifadəçi yaradın

Sonra linux istifadəçi adınızı daxil edin və superuser seçimi üçün Bəli seçin.

Çıxış yazaraq postgre istifadəçisindən çıxın.

İstifadəçinizlə yazaraq yeni bir verilənlər bazası yaradın

Verilənlər bazasında cədvəl uçuşlarınızı yarada və cədvələ dəyərlər əlavə edə bilərsiniz (və ya əlavə edə bilərsiniz).

List.py'yi çalıştırmak üçün # 7 sətrini engine = create_engine ("postgresql: /// mydb") ilə dəyişdirə və python list.py-ni çalıştırabilirsiniz. Hər şey düzgündürsə, nəticəni görməlisiniz:

1- SQL Shell-də yeni bir istifadəçi yaradın:

2- SQL Shell-də yeni bir verilənlər bazası yaradın:

SQL qabığını bağlayın və yenidən açın, yeni yaratdığınız istifadəçi üçün yeni istifadəçi adı və şifrə daxil edin.

Yeni bir verilənlər bazası yaratmaq üçün aşağıdakı əmri yazın:

Yeni yaratdığımız verilənlər bazasına qoşulmalı, aşağıdakı əmri yazmalısınız:

3- SQL Shell-də yeni bir cədvəl yaradın

4- Cədvəlinizə bəzi sətirlər daxil etdiyinizə əmin olun

5- Verilənlər bazasının URL-sini düzgün yazın

URL müəyyən bir nümunəni izləməlidir:

1- Bu URL-ni birbaşa kodunuzda istifadə edə bilərsiniz

2- Və ya DATABASE_URL adı və URL dəyəri ilə yeni bir mühit dəyişəni yaradın.

Ümid edirəm bəziləriniz bunu faydalı tapacaqsınız :)

problem os modulundadır, kodda url = 'postgresql: // localhost' qeyd etsəm kodu heç bir problem olmadan çalışdıra bilərəm. Gördüyüm mühit dəyişənlərinin dəyərlərini almaq üçün mübarizə aparıram.

Anaconda istifadə edirəm - verilənlər bazasını işlətmək və Anaconda terminalında envir var ayarlama + Spyder-də list.py kodunu işə salmaq.

Windows-a əl ilə əlavə etmək də daxil olmaqla dəyişəni qurmağın bir çox yolunu sınadım.

Çap (os.getenv ("DATABASE_URL")) işlətdiyim zaman hər dəfə Yoxdur.

1- SQL Shell-də yeni bir istifadəçi yaradın:

Rolunuzu yaradın_user_name LOGIN PARWORD 'your_password' NOINHERIT CREATEDB 2- SQL Shell-də yeni bir verilənlər bazası yaradın:

SQL qabığını bağlayın və yenidən açın, yeni yaratdığınız istifadəçi üçün yeni istifadəçi adı və şifrə daxil edin.

Yeni bir verilənlər bazası yaratmaq üçün aşağıdakı əmri yazın:

DATABASE mydb yarat YENİ yaratdığımız yeni verilənlər bazasına qoşulmalısınız, aşağıdakı əmri yazın:

c mydb 3- SQL Shell-də yeni bir cədvəl yaradın

CƏDVƏL uçuşlarını yaradın (id SERİAL İLK ANAHTAR, mənşə VARCHAR NULL DEYİL, təyinat VARCHAR NULL DEYİL, müddəti ANTEGER DEYİL) 4- Cədvəlinizə bəzi sətirlər daxil etdiyinizə əmin olun


  1. A sütunundakı siyahını seçin
  2. Sağ klikləyin və bir Aralıq Adı seçin.
  3. "ColumnToSearch" daxil edin
  4. C1 hüceyrəsini vurun
  5. Bu formulu daxil edin: = MATCH (B1, ColumnToSearch, 0)
  6. B-dəki bütün maddələr üçün formulu aşağı sürükləyin

Düstur uyğunluğu tapa bilmədikdə, # N / A işarəsi alacaq, əks halda bir rəqəm olacaqdır.

Matç üçün DOĞRU, uyğunsuzluq üçün YALAN olmaq istəsəniz, bunun əvəzinə bu formulu istifadə edin:

Geri qaytarmaq istəsəniz əsassız dəyər və tapılan dəyərlər üçün boş simli qaytarın

Budur tez və çirkli bir metod.

Sütunu seçin B və açın Şərti Biçimləmə.

Seçin Hansı hüceyrələrin vurğulanacağını təyin etmək üçün bir düsturdan istifadə edin.

Aşağıdakı formulu daxil edin və sonra istədiyiniz formatı təyin edin.

İki sütunu seçin. Şərti Biçimləndirməyə gedin və Hüceyrə Qaydalarını Vurgulayın seçin. Dublikat dəyərlərini seçin. Növbəti addıma çatdıqda onu misilsiz dəyərlərə dəyişə bilərsiniz. Sadəcə etdim və mənim üçün işləyirdi.

Bunu anlamaq üçün məni əbədi götürdü, amma çox sadədir. Məlumatın A2 və B2-də başladığını düşünsək (başlıqlar üçün) bu formulu C2-yə daxil edin:

# N / A olan bir hüceyrə, B sütundakı birbaşa yanındakı dəyərin bütün A sütununda heç bir yerdə görünməməsi deməkdir.

Xahiş edirik unutmayın ki, A Sütunundakı bütün axtarış massivinizlə uyğunlaşmaq üçün $ 287 $ dəyişdirməlisiniz, məsələn A sütunundakı məlumatlar 1000 giriş üçün azalırsa, $ A $ 1000 olmalıdır.

B siyahısında tapılmayan A siyahısına mənim sıra formulu cavabına baxın:

Tələblərimi vurğulamaq yox, 2 sütun arasında təkrarlanan istisna olmaqla bütün dəyərləri göstərmək idi. @ Brenton həllindən kömək aldım və məlumatları birbaşa istifadə edə bilmək üçün dəyərləri göstərmək üçün daha da yaxşılaşdırdım:

Bunu 3-cü sütunun ilk xanasına kopyalayın və formulu B sütunundakı bütün elementləri A sütununda göstərilməməsi üçün sütunun xaricinə tətbiq edin.

Cavablarını bölüşənlərə təşəkkür edirəm. Çözümləriniz sayəsində öz yoluma gedə bildim.

Bu sualın versiyasında müqayisə etmək üçün iki sütun var idi - tam məzun sinif (Col A) və həmin məzun sinifin alt qrupu (Col B). Tam məzun sinifində alt qrupun üzvləri olan tələbələri qabartmaq istədim.

Aşağıdakı formulu üçüncü sütuna qoydum:

İlk bir neçə məlumat sətrində bəzi səhvlər olsa da, bu, tələbələrimin əksəriyyətini kodlaşdırdı.


XLS sənədini LibreOffice və ya OpenOffice-də açarsanız, Saxla. və mətn CSV-ni seçin, ayırıcı kimi tırnakların da daxil olduğu bir CSV faylı yaratmağa imkan verir. Məsələn: "Smith", "Pete", "Canada" "Jones", "Mary", "England"

Yalnız "Bütün mətn hüceyrələrini sitat gətir" qutusunu işarələyin:

Rəqəmsal sahələrdən də sitat gətirmək üçün hüceyrə aralığınızı qeyd edin və yadda saxlamadan əvvəl hüceyrə formatını "mətn" olaraq dəyişdirin.

Bu səhifədə birbaşa atın ağzından gələn həll yolu var:

Bağlantı zəifləyirsə, axtarılacaq mövzu:

"Excel-də həm vergül, həm də sitat ayırıcıları olan bir mətn sənədinin ixracı proseduru" və / və ya "Q291296"

Bu asan həlli tapdım:

  1. Sitatlar əlavə etmək istədiyiniz hüceyrələri vurğulayın.
  2. Sağ klikləyin: Hüceyrələri Formatla & rarr Tab: Sayı və rarr Kateqoriya: Xüsusi
  3. Aşağıdakıları yapışdırın Yazın sahə: "''" @ "''" (aşağıda göstərilənlərə baxın)
  4. “Tamam” düyməsini vurun

Yapışdırdığınız sətir "''" @ "''" ikiqat sitat, tək sitat, tək sitat, ikiqat sitat, @ simvolu, ikiqat sitat, tək sitat, tək sitat, cüt sitatdır.

Buradakı məlumatlardan Excel 2010 üçün düzəliş edildi.

Powershell düzgün bir şəkildə atıldığı görünür. buna bənzər bir şey

powerhell-i bilmirsinizsə Windows maşınında PowerShell.exe axtarın.

Sitatlar əlavə etmək istədiyiniz hüceyrələri vurğulayın. Format -> Hüceyrələr -> Xüsusi Kopyala / Aşağıdakıları Tip sahəsinə yapışdırın: ”@ ” “Tamam” düyməsini basın Bütün bunları əlinizlə etməmisiniz.

Bu mənim üçün ən asan idi: cədvəli Access 2010-a idxal etdim və ayrılmış mətn faylı olaraq oradan ixrac etdim. Mənə əkin sahələrinin ətrafındakı təklifləri ver. İndi addımlar aşağı olduğum üçün 42k sıra üçün bir dəqiqədən az vaxt aparır.

Ətrafında VBA Makrosu əhatə etməyən, lakin Notepad ++ və ya oxşar bir makro əsaslı mətn redaktoru tələb edən başqa bir iş tapdım.

Faylınızı Tabla ayrılmış mətn kimi ixrac edin, sonra ixrac olunan faylı Not Defteri ++ içərisində açın. 'Nişan' simvolunun bütün nümunələrini "," mətni ilə əvəz edin (yəni hərfi mənada cüt sitat, vergül, ikiqat sitat) və sonra mətnin hər sətrinə cüt sitat gətirmək və əlavə etmək üçün başqa bir makro istifadə edin.

Bir az hacky, amma VBA makrosunun işləməsindən daha sürətli tapdım.

  1. Sitatlar əlavə etmək istədiyiniz hüceyrələri vurğulayın.
  2. Sağ klikləyin: Hüceyrələri Formatlaşdırma → Tab: Nömrə → Kateqoriya: Xüsusi
  3. Aşağıdakıları Tip sahəsinə yapışdırın: "''" @ "''" (aşağıda göstərilənlərə baxın)
  4. “Tamam” düyməsini vurun
  5. .Csv faylını Not Defteri (və ya ekvivalenti) ilə açın
  6. Hamısını '' (tək tək sitatları) ilə "(ikiqat sitat) ilə əvəz edin
  7. Hamısını dəyişdirin
  8. Yenidən işlənmiş .csv faylını qeyd edin

Hər sətrin əvvəlinə kotirovka əlavə etmək üçün Notepad ++ istifadə edirsinizsə, yalnız ixrac edilmiş CSV sənədini açın, kursorunuzu 1-ci sətirdə, 1-ci sütunda qoyun, sonra menyunu vurun Düzəliş / Sütun Redaktoru. , sahədə 'Daxil etmək üçün mətn', daxil edin ", sonra hər sətrin əvvəlində bir təklif olacaq, sonra bütün nişanları axtarmaq / dəyişdirmək üçün müntəzəm ifadədən istifadə edə bilərsiniz.

  1. Excel sənədini CSV olaraq "kimi saxla"
  2. Mircrosoft Works Spreadsheet ilə qeyd olunan faylı açın
  3. Cədvəl CSV olaraq "kimi saxla"
  4. Artıq bütün ədədi olmayan sahənin ətrafında "var

Qeyd edək ki, bu, irəli və amp müxtəlifliyə sahib olan eyni klaviatura təklifi deyil.
Beləliklə, CSV-ni Mysql masasına yükləmək üçün istifadə etsəniz, kəsin və QAPALI parametrə yapışdırın, əks halda niyə # 1083 mesajı aldığınızı düşünəcəksiniz - Sahə ayırıcı arqumenti gözlənilən deyil

Excel-də üç sütun götürmək və dördüncü sütunda simli qurmaq üçün aşağıdakı yanaşmadan istifadə etdim.

"" '"@"' '"Yanaşma ilə əlaqəli problemim, məlumatlarımın ikinci sütunu bir rəqəm idi." "'" @ "''" Yanaşması rəqəmlərlə heç bir əlaqəsi olmadı. Bəzən ikinci sütun boş olur, amma son mətn sənədində təmsil olunduğundan əmin olmalıydım.

MS girişiniz varsa (2007-ci ildə verdiyim) bir faylı idxal etdikdən sonra mətn faylı olaraq ixrac edin. Sonra .txt-i .csv olaraq dəyişdirin. Diqqət yetirin ki, bütün nömrə sahələrinin ətrafında ikiqat işarələr olmayacaqdır, belə ki, nömrələr ətrafında ikiqat təkliflərə ehtiyacınız olarsa, Access-də bir ədədi sahədən mətn sahəsinə dəyişdirin.

Vergülün ayrıldığı və sitat verilmiş sətirlərin ixracı, yalnız Excel 2016 və Notepad ilə, məlumatların bir kopyası, bir düstur, bir ixrac, bir fayl xüsusiyyətləri dəyişikliyi, bir Not Defteri'ndeki bir əvəzləmə, ixrac edilən faylın qorunması və təmizlənməsindən istifadə edilə bilər. Hər biri sadə bir addımdır. Ətraflı:

Orijinalı qorumaq üçün yeni bir ara vərəqə köçürüləcək sütunları kopyalayın və ehtiyat nüsxə ilə silin, yeni vərəq olduğu kimi elektron tablodan çıxsın.

Əks təqdirdə baş verməyən simvolları (işarələri) qoyun, sütundakı bir sətrin hər ucunda '#' və ya '-)' deyin A düsturu = concat ("#", trim (A1), "#") deyərək A deyin. başqa bir sütunun bütün satırlarındakı düstur.

  • Bitişik sütunlar eyni vaxtda edilə bilər, lakin sətir şəklində oxunmaması üçün rəqəmlər gətirməyin.
  • Döşəmə, bacarıqsız ixracat davranışına səbəb ola biləcək arxada qalan boşluqların qarşısını alır.
  • Sətirlər idxalda narahatlıq yarada biləcək '' 'olmamalıdır.

Düsturu daşımamaq üçün '123' metodundan istifadə edərək yeni sütunu (lər) yenidən A.-nın üzərinə köçürün.

Rəqəmlər daxil olmaqla sahələr arasında vergül qoymaq üçün vərəqi bir CSV faylı olaraq ixrac edin.

File.csv xüsusiyyətlərini Not Defteri ilə açılacaq şəkildə dəyişdirin.

Təsadüfi simvolları '' 'ilə əvəz etmək üçün Not Defteri istifadə edin.

"Təsadüfi bir xarakter olaraq istifadə etmək məntiqli görünsə də, fərqli bir hüceyrəyə qoyulmalı, '$ A $ 50' deyin, sonra ixracatda görünən ''" "'dir, görünür bir başqa əlverişsiz tetikleyici.

Notepadda, faylın idxal ediləcək * .txt faylı halına gətirilməli və aralıq * .csv silinməlidir.

Əlavə cədvəl hesabatının təmizlənməsi ilə missiya yerinə yetirildi.

Bəlkə Access ixrac alətləri bir gün Excel-də yerləşdirilə bilər. Kəsmə və yapışdırma istifadə edən proqramlar arasında daha ümumi bir yanaşma, yapışdırma seçimlərinin çıxış quruluşunu şərh etmək və ayırıcıları təmin etmək üçün bir yol seçməsindən ibarət olmasıdır.


PostgreSQL verilənlər bazasına GPX faylları əlavə edin və verilmiş bir dəyəri olan bir sütun əlavə edin - Coğrafi İnformasiya Sistemləri

Bu təlimatı tərcümə etməyə kömək edin!


Böyük miqyaslı sistemlərin dizaynını öyrənin.

Sistem dizayn müsahibəsi üçün hazırlıq.

Böyük miqyaslı sistemlərin dizaynını öyrənin

Ölçeklenebilir sistemlərin dizaynını öyrənmək daha yaxşı bir mühəndis olmağınıza kömək edəcəkdir.

Sistem dizaynı geniş bir mövzudur. Var vebdə səpələnmiş geniş miqdarda mənbələr sistem dizayn prinsipləri haqqında.

Bu repo bir mütəşəkkil kolleksiya miqyasda sistemlər qurmağı öyrənməyə kömək edəcək mənbələr.

Açıq mənbəli cəmiyyətdən məlumat əldə edin

Bu daim yenilənən, açıq mənbəli bir layihədir.

Sistem dizayn müsahibəsi üçün hazırlıq

Kodlaşdırma reportajlarına əlavə olaraq sistem dizaynı a tələb olunan komponent nin texniki görüşmə prosesi bir çox texnoloji şirkətdə.

Ortaq sistem dizaynına dair müsahibə suallarını tətbiq edinmüqayisə et nəticələri ilə nümunə həlləri: müzakirələr, kod və diaqramlar.

Müsahibə hazırlığı üçün əlavə mövzular:


Təqdim olunan Anki flashcard göyərtələrində əsas sistem dizayn konsepsiyalarını qorumağınıza kömək etmək üçün aralıq təkrar istifadə olunur.

Yolda olarkən istifadə üçün əladır.

Kodlaşdırma Resursu: İnteraktiv Kodlaşdırma Problemləri

Üçün hazırlamağınıza kömək edəcək mənbələr axtarırsınız Kodlaşdırma Müsahibəsi?


Repo bacıya baxın İnteraktiv Kodlaşdırma Problemləriəlavə bir Anki göyərtəsi olan:

Kömək üçün sorğu göndərməkdən çəkinməyin:

Bəzi cilalanmaya ehtiyacı olan məzmunun hazırlanması mərhələsindədir.

Sistem dizaynı mövzular indeksi

Müsbət və mənfi cəhətləri də daxil olmaqla müxtəlif sistem dizaynı mövzularının xülasələri. Hər şey mübahisəlidir.

Hər bölmə daha dərin mənbələrə istinadları ehtiva edir.


Müsahibə vaxtınız (qısa, orta, uzun) əsasında nəzərdən keçirilmək üçün təklif olunan mövzular.

S: Müsahibələr üçün burada hər şeyi bilməliyəm?

A: Xeyr, reportaja hazırlaşmaq üçün burada hər şeyi bilmək lazım deyil.

Müsahibədə sizə verilən şey aşağıdakı kimi dəyişkənlərdən asılıdır:

  • Nə qədər təcrübən var
  • Texniki fonunuz nədir
  • Hansı vəzifələrə müsahibə verirsiniz
  • Hansı şirkətlərlə görüşürsünüz
  • Uğurlar

Daha təcrübəli namizədlərin ümumiyyətlə sistem dizaynı haqqında daha çox məlumatları gözlənilir. Memarların və ya qrup rəhbərlərinin fərdi ianəçilərdən daha çox şey bilməsi gözlənilir. Ən yaxşı texnoloji şirkətlərin, ehtimal ki, bir və ya daha çox dizayn müsahibəsi dövrü olacaq.

Geniş başlayın və bir neçə sahədə daha dərinə gedin. Müxtəlif açar sistem dizaynı mövzularında bir az məlumat əldə etməyə kömək edir. Aşağıdakı təlimatı zaman cədvəlinizə, təcrübənizə, hansı vəzifələrdə görüşdüyünüzə və hansı şirkətlərlə görüşdüyünüzə əsasən tənzimləyin.

  • Qisa vaxt qrafiki - Məqsəd eni sistem dizaynı mövzuları ilə. Həll edərək tətbiq edin bəzi müsahibə sualları.
  • Orta qrafiki - Məqsəd enibir az dərinlik sistem dizaynı mövzuları ilə. Həll edərək tətbiq edin çox müsahibə sualları.
  • Uzun müddət qrafiki - Məqsəd enidaha dərinlik sistem dizaynı mövzuları ilə. Həll edərək tətbiq edin ən çox müsahibə sualları.

Sistem dizayn müsahibə sualına necə yanaşmaq olar

Sistem dizayn müsahibəsi sualını necə həll etmək olar.

Sistem dizayn müsahibəsi bir açıq söhbət. Buna rəhbərlik etməyiniz gözlənilir.

Müzakirəyə rəhbərlik etmək üçün aşağıdakı addımlardan istifadə edə bilərsiniz. Bu prosesi möhkəmləndirməyə kömək etmək üçün aşağıdakı addımları istifadə edərək Sistem dizayn müsahibə suallarını həll bölməsində nəzərdən keçirin.

Adım 1: İstifadə hallarını, məhdudiyyətlərini və fərziyyələrini müəyyənləşdirin

Tələbləri toplayın və problemi əhatə edin. İstifadə hallarını və məhdudiyyətlərini aydınlaşdırmaq üçün suallar verin. Fərziyyələri müzakirə edin.

  • Kim istifadə edəcək?
  • Onu necə istifadə edəcəklər?
  • Neçə istifadəçi var?
  • Sistem nə edir?
  • Sistemin giriş və çıxışları nədir?
  • Nə qədər məlumatları idarə edəcəyimizi gözləyirik?
  • Saniyədə neçə tələb gözləyirik?
  • Oxumaq üçün yazma nisbəti nə qədərdir?

Addım 2: Yüksək səviyyəli bir dizayn yaradın

Bütün vacib komponentlərlə birlikdə yüksək səviyyəli dizaynı müəyyənləşdirin.

Adım 3: Əsas komponentlərin dizaynı

Hər bir əsas komponent üçün detallara dalın. Məsələn, bir url qısaltma xidməti hazırlamağınız istənsə, müzakirə edin:

  • Tam url bir hash yaratmaq və saxlamaq
      və baza62
  • Hash toqquşmaları
  • SQL və ya NoSQL
  • Verilənlər bazası şeması
    • Verilənlər bazasına baxın

    Məhdudluqları nəzərə alaraq dar problemləri müəyyənləşdirin və həll edin. Məsələn, ölçeklenebilirlik problemlərini həll etmək üçün aşağıdakılara ehtiyacınız var?

    Potensial həll yollarını və mübahisələri müzakirə edin. Hər şey mübahisəlidir. Ölçeklenebilir sistem dizaynı prinsiplərindən istifadə edərək dar problemləri həll edin.

    Əl ilə bəzi təxminlər etməyiniz istənə bilər. Aşağıdakı mənbələr üçün Əlavəyə baxın:

    Mənbə (lər) və əlavə oxumaq

    Nələri gözləyəcəyiniz barədə daha yaxşı bir fikir əldə etmək üçün aşağıdakı linklərə baxın:

    Sistem dizayn müsahibə sualları həll yolları ilə

    Nümunə müzakirələr, kod və diaqramlarla ümumi sistem dizaynı müsahibə sualları.

    Həllər / qovluqdakı məzmuna bağlı həllər.

    Sual
    Dizayn Pastebin.com (və ya Bit.ly) Həll
    Twitter qrafiki və axtarışını (və ya Facebook lentini və axtarışını) dizayn edin Həll
    Veb tarayıcısı dizayn edin Həll
    Dizayn Mint.com Həll
    Sosial şəbəkə üçün məlumat strukturlarını dizayn edin Həll
    Bir axtarış mühərriki üçün əsas dəyər mağazası dizayn edin Həll
    Amazonun kateqoriya xüsusiyyətlərinə görə satış sıralamasını dizayn edin Həll
    AWS-də milyonlarla istifadəçiyə tərəzi verən bir sistem dizayn edin Həll
    Sistem dizaynı sualını əlavə edin Töhfə verin

    Dizayn Pastebin.com (və ya Bit.ly)

    Twitter qrafiki və axtarışını (və ya Facebook lentini və axtarışını) dizayn edin

    Sosial şəbəkə üçün məlumat strukturlarını dizayn edin

    Bir axtarış mühərriki üçün əsas dəyər mağazası dizayn edin

    Amazonun kateqoriya xüsusiyyətlərinə görə satış sıralamasını dizayn edin

    AWS-də milyonlarla istifadəçiyə tərəzi verən bir sistem dizayn edin

    Həlli ilə obyekt-yönümlü dizayn müsahibəsi sualları

    Nümunə müzakirələr, kod və diaqramlarla ümumi obyekt yönümlü dizayn müsahibəsi sualları.

    Həllər / qovluqdakı məzmuna bağlı həllər.

    Qeyd: Bu bölmə hazırlanır

    Sual
    Bir hash xəritəsi dizayn edin Həll
    Ən az istifadə edilmiş bir önbellek dizayn edin Həll
    Çağrı mərkəzi dizayn edin Həll
    Kartların göyərtəsini dizayn edin Həll
    Bir park yeri dizayn edin Həll
    Söhbət serverini dizayn edin Həll
    Dairəvi bir sıra düzəldin Töhfə verin
    Bir obyekt yönümlü dizayn sualı əlavə edin Töhfə verin

    Sistem dizaynı mövzuları: buradan başlayın

    Birincisi, ümumi prinsipləri, onların nə olduğunu, necə istifadə edildiklərini və müsbət və mənfi cəhətlərini öyrənmək üçün əsas bir anlayışa ehtiyacınız olacaq.

    Addım 1: Ölçeklenebilirlik video mühazirəsini nəzərdən keçirin

    • Əhatə olunan mövzular:
      • Şaquli miqyaslandırma
      • Üfüqi miqyaslandırma
      • Keşləmə
      • Yük balansı
      • Verilənlər bazasının təkrarlanması
      • Verilənlər bazası bölgüsü

      Addım 2: Ölçeklenebilirlik məqaləsini nəzərdən keçirin

      Sonra, yüksək səviyyəli mübadilələrə baxacağıq:

      • Performans vs ölçeklenebilirlik
      • Gecikmə vs məhsuldarlıq
      • Mövcudluğu vs tutarlılıq

      Bunu unutmayın hər şey bir mübahisəlidir.

      Sonra DNS, CDN və yük balanslaşdırıcıları kimi daha spesifik mövzulara dalırıq.

      Performans və ölçeklenebilirlik

      Bir xidmətdir ölçeklenebilir artması ilə nəticələnirsə performans əlavə edilmiş mənbələrlə mütənasib bir şəkildə. Ümumiyyətlə, performansı artırmaq daha çox iş vahidinə xidmət etmək deməkdir, eyni zamanda daha geniş iş vahidlərini idarə etmək də ola bilər, məsələn məlumat dəstləri böyüdükdə. 1

      Performansa və ölçeklenebilirliğe baxmaq üçün başqa bir yol:

      • Bir varsa performans problem, sisteminiz tək bir istifadəçi üçün yavaş.
      • Bir varsa ölçeklenebilirlik problem, sisteminiz tək bir istifadəçi üçün sürətli, lakin ağır yük altında yavaş.

      Mənbə (lər) və əlavə oxumaq

      Gecikmə bəzi hərəkətləri yerinə yetirməyin və ya bir nəticə verməyin vaxtıdır.

      Məhsuldarlıq zaman vahidi başına bu cür hərəkətlərin və ya nəticələrin sayıdır.

      Ümumiyyətlə, hədəf almalısan maksimum istehsal ilə məqbul gecikmə.

      Mənbə (lər) və əlavə oxumaq

      Mövcudluq və tutarlılıq

      Paylanmış bir kompüter sistemində aşağıdakı təminatlardan yalnız ikisini dəstəkləyə bilərsiniz:

      • Ardıcıllıq - Hər oxunuşda ən son yazı və ya bir səhv gəlir
      • Mövcudluğu - Hər bir sorğu məlumatın ən son versiyasını ehtiva etdiyinə zəmanət olmadan cavab alır
      • Bölmə Tolerantlığı - Şəbəkə uğursuzluqları səbəbindən sistem özbaşına bölünməsinə baxmayaraq fəaliyyətini davam etdirir

      Şəbəkələr etibarlı deyil, buna görə bölmə tolerantlığını dəstəkləməlisiniz. Uyğunluq və mövcudluq arasında bir proqram mübadiləsi etməlisiniz.

      CP - tutarlılıq və bölünmə tolerantlığı

      Bölünmüş qovşaqdan cavab gözləmək zaman aşma xətası ilə nəticələnə bilər. CP, işinizin atom oxuması və yazması tələb olunarsa yaxşı bir seçimdir.

      AP - mövcudluq və bölünmə tolerantlığı

      Cavablar, hər hansı bir qovşaqda mövcud olan məlumatların ən son versiyası ola bilər ki, bu da ən son olmaya bilər. Bölmə həll edildikdə yazıların yayılması bir az vaxt ala bilər.

      AP, iş ehtiyaclarına son dərəcə uyğunluq təmin edərsə və ya xarici səhvlərə baxmayaraq sistemin işə davam etməsi lazım olsa yaxşı seçimdir.

      Mənbə (lər) və əlavə oxumaq

      Eyni məlumatların birdən çox nüsxəsi ilə müştərilərin məlumatları ardıcıl görməsi üçün onları necə sinxronlaşdıracağımıza dair seçimlərlə qarşılaşırıq. Tutarlılığın tərifini CAP teoremindən xatırlayın - Hər oxunuş ən son yazı və ya səhv alır.

      Yazdıqdan sonra oxuya bilər və ya görməyəcək. Ən yaxşı səy yanaşması alınır.

      Bu yanaşma memcached kimi sistemlərdə görülür. Zəif tutarlılıq, VoIP, video söhbət və real vaxt çox oyunçu oyunları kimi real vaxt istifadə hallarda yaxşı işləyir. Məsələn, bir telefon danışıqındasınızsa və bir neçə saniyəlik qəbulunuzu itirirsinizsə, əlaqəni bərpa etdikdə, əlaqə itkisi zamanı danışılanları eşitmirsiniz.

      Yazdıqdan sonra oxuyanlar nəticədə onu görəcəklər (ümumiyyətlə millisaniyə ərzində). Məlumat asenkron şəkildə təkrarlanır.

      Bu yanaşma DNS və e-poçt kimi sistemlərdə görülür. Son dərəcə uyğunluq yüksək səviyyədə mövcud olan sistemlərdə yaxşı işləyir.

      Yazdıqdan sonra oxuyanlar görəcəklər. Məlumat sinxron şəkildə təkrarlanır.

      Bu yanaşma fayl sistemlərində və RDBMS-lərdə görülür. Güclü bir tutarlılıq, əməliyyatlara ehtiyacı olan sistemlərdə yaxşı işləyir.

      Mənbə (lər) və əlavə oxumaq

      Yüksək mövcudluğu dəstəkləyən iki tamamlayıcı nümunə var: uğursuztəkrarlama.

      Aktiv-passiv uğursuzluqla, gözləmə rejimində olan aktiv və passiv server arasında ürək atışları göndərilir. Ürək döyüntüsü kəsilirsə, passiv server aktivin IP ünvanını alır və xidmətini davam etdirir.

      Boş vaxtın uzunluğu passiv serverin artıq "isti" gözləmə rejimində işləməsi və ya "soyuq" gözləmə rejimindən işə başlamasına ehtiyac olub-olmaması ilə müəyyən edilir. Yalnız aktiv server trafiki idarə edir.

      Aktiv-passiv boşalma, master-slave failover kimi də adlandırıla bilər.

      Aktiv-aktiv olaraq hər iki server trafiki idarə edir və yükü aralarına yayır.

      Serverlər ictimaiyyətə baxırsa, DNS-nin hər iki serverin ümumi IP-ləri barədə bilməsi lazımdır. Serverlər daxili tərəfdəsə, tətbiq məntiqinin hər iki server haqqında da bilməsi lazımdır.

      Aktiv-aktiv iflasa master-master failover də deyilə bilər.

      • Uğursuzluq daha çox hardware və əlavə mürəkkəblik yaradır.
      • Yeni yazılmış məlumatların passivə təkrarlanmasından əvvəl aktiv sistem uğursuz olarsa, məlumat itkisi ehtimalı var.

      Ağa-kölə və ağa-ağa

      Bu mövzu daha sonra verilənlər bazası bölməsində müzakirə olunur:

      Mövcudluq tez-tez xidmətin mövcud olduğu bir faiz nisbətində iş vaxtı (və ya boş vaxt) ilə ölçülür. Mövcudluq ümumiyyətlə 9s sayı ilə ölçülür -% 99.99 olan bir xidmət dörd 9-a sahib olduğu kimi təsvir edilir.

      99.9% mövcudluq - üç 9s

      Müddət Qəbul edilə bilən fasilələr
      İldə boş vaxt 8h 45min 57s
      Ayda boş vaxt 43m 49.7s
      Həftədə boşluq 10m 4.8s
      Gündə dayanma 1m 26.4s

      % 99.99 mövcudluğu - dörd 9s

      Müddət Qəbul edilə bilən fasilələr
      İldə boş vaxt 52 dəq 35.7s
      Ayda boş vaxt 4m 23s
      Həftədə boşluq 1m 5s
      Gündə dayanma 8.6s

      Paralel və ardıcıl olaraq mövcuddur

      Bir xidmət uğursuzluğa meylli bir çox komponentdən ibarətdirsə, xidmətin ümumi mövcudluğu komponentlərin ardıcıl və ya paralel olmasından asılıdır.

      Mümkünlüyü 100% olan iki komponent ardıcıl olduqda ümumi mövcudluq azalır:

      Həm Foo, həm də Barın hər birində% 99.9 mövcudluq olsaydı, ardıcıllıqla ümumi mövcudluğu% 99.8 olardı.

      Mümkünlüyü və lt% 100 olan iki komponent paralel olduqda ümumi mövcudluq artır:

      Hər iki Foo və Barın hər biri 99.9% əlçatan olsaydı, paralel olaraq ümumi mövcudluğu 99.9999% olardı.

      Domain Name System (DNS) www.example.com kimi bir domen adını bir IP ünvanına çevirir.

      DNS hiyerarşikdir, ən üst səviyyədə bir neçə nüfuzlu server var. Yönləndiriciniz və ya ISP bir axtarış edərkən hansı DNS server (lər) lə əlaqə quracağı barədə məlumat verir. Aşağı səviyyəli DNS serverləri, DNS-nin yayılma gecikmələri səbəbindən köhnələ bilən eşleme önbelleğini. DNS nəticələri, yaşamaq vaxtı (TTL) ilə müəyyənləşdirilən müəyyən bir müddət üçün brauzeriniz və ya OS tərəfindən önbelleğe alınabilir.

      • NS qeyd (ad server) - Etki alanınız / alt alanınız üçün DNS serverlərini müəyyənləşdirir.
      • MX qeyd (poçt mübadiləsi) - Mesaj qəbul etmək üçün poçt serverlərini təyin edir.
      • Qeyd (ünvan) - Bir IP ünvanına bir ad göstərir.
      • CNAME (kanonik) - Bir adı başqa bir ada və ya CNAME-yə (example.com-dan www.example.com-a) və ya A qeydinə yönəldir.

      CloudFlare və Route 53 kimi xidmətlər idarə olunan DNS xidmətləri təqdim edir. Bəzi DNS xidmətləri trafiki müxtəlif üsullarla yönləndirə bilər:

        • Trafikin texniki baxımdan serverlərə getməsinin qarşısını alın
        • Müxtəlif qrup ölçüləri arasındakı balans
        • A / B testi
        • Bir DNS serverinə daxil olmaq, yuxarıda göstərilən önbelleğe salma ilə azaldılsa da, kiçik bir gecikmə təqdim edir.
        • DNS server idarəçiliyi mürəkkəb ola bilər və ümumiyyətlə hökumətlər, İnternet provayderləri və böyük şirkətlər tərəfindən idarə olunur.
        • DNS xidmətləri bu yaxınlarda DDoS hücumuna məruz qaldı və istifadəçilərin Twitter kimi veb saytlarına Twitterin IP adreslərini bilmədən daxil olmalarına mane oldu.

        Mənbə (lər) və əlavə oxumaq

        Məzmun çatdırılma şəbəkəsi (CDN), istifadəçiyə daha yaxın yerlərdən məzmunu təqdim edən, dünya səviyyəsində paylanmış bir proxy server şəbəkəsidir. Ümumiyyətlə, HTML / CSS / JS, foto və videolar kimi statik fayllar CDN-dən təqdim olunur, baxmayaraq ki Amazon-un CloudFront kimi bəzi CDN-lər dinamik məzmunu dəstəkləyir. Saytın DNS qətnaməsi müştərilərə hansı serverlə əlaqə quracağını bildirəcəkdir.

        CDN-lərdən məzmunun təqdim edilməsi performansı iki şəkildə əhəmiyyətli dərəcədə artıra bilər:

        • İstifadəçilər özlərinə yaxın məlumat mərkəzlərindən məzmun alır
        • Serverlərinizin CDN-in yerinə yetirdiyi istəklərə cavab vermək məcburiyyətində deyil

        Push CDN-lər, serverinizdə dəyişiklik olduqda yeni məzmun alır. Məzmun təmin etmək, birbaşa CDN-ə yükləmək və CDN-yə işarə etmək üçün URL-ləri yenidən yazmaq üçün bütün məsuliyyəti öz üzərinizə götürürsünüz. Məzmunun bitmə vaxtı və yenilənməsi zamanı konfiqurasiya edə bilərsiniz. Məzmun yalnız yeni olduqda və ya dəyişdirildikdə yüklənir, trafik minimuma endirilir, lakin yaddaş maksimum dərəcədə artır.

        Az miqdarda trafikə sahib saytlar və ya tez-tez yenilənməyən məzmunu olan saytlar təkan CDN-ləri ilə yaxşı işləyir. Məzmun müəyyən aralıqlarla yenidən çəkilmək əvəzinə bir dəfə CDN-lərə yerləşdirilir.

        CDN-lər çəkin, ilk istifadəçi məzmunu tələb etdikdə serverinizdən yeni məzmun alın. Məzmunu serverinizdə qoyursunuz və CDN-ə işarə etmək üçün URL'ləri yenidən yazırsınız. Bu, məzmunun CDN-də yaddaşa alınana qədər daha yavaş bir istəklə nəticələnir.

        Yaşamaq üçün vaxt (TTL) məzmunun nə qədər önbelleğe alınacağını təyin edir. CDN-ləri çəkin, CDN-də saxlama sahəsini minimuma endirin, lakin sənədlərin müddəti bitib gerçək dəyişmədən çəkilərsə, artıq trafik yarada bilər.

        Ağır trafikə sahib saytlar CDN-lərdə yaxşı işləyir, çünki trafik CDN-də qalan və bu yaxınlarda istənən məzmunda daha bərabər şəkildə yayılır.

        • CDN xərcləri trafikə görə əhəmiyyətli ola bilər, baxmayaraq ki, bu, CDN istifadə etməyəcəyiniz əlavə xərclərlə ölçülməlidir.
        • TTL müddəti bitmədən yenilənirsə məzmunu köhnə ola bilər.
        • CDN-lər, statik məzmunun CDN-yə yönəlməsi üçün URL-lərin dəyişdirilməsini tələb edir.

        Mənbə (lər) və əlavə oxumaq

        Yük balanslaşdırıcıları daxil olan müştəri istəklərini tətbiqetmə serverləri və verilənlər bazaları kimi hesablama mənbələrinə paylayır. Hər halda, yük balanslaşdırıcısı hesablama mənbəyindəki cavabı müvafiq müştəriyə qaytarır. Yük balanslaşdırıcıları aşağıdakı məqamlarda təsirli olur.

        • İstəklərin zərərli serverlərə getməsinin qarşısını almaq
        • Resursların həddindən artıq yüklənməsinin qarşısının alınması
        • Tək bir uğursuzluq nöqtəsini aradan qaldırmağa kömək edir

        Yük balanslaşdırıcıları hardware (bahalı) və ya HAProxy kimi proqram təminatı ilə həyata keçirilə bilər.

        Əlavə üstünlüklərə aşağıdakılar daxildir:

        • SSL ləğvi - Gələn istəklərin şifrəsini açın və server cavablarını şifrələyin, beləliklə arxa serverlər bu potensial bahalı əməliyyatları yerinə yetirməli deyillər
          • Hər bir serverdə X.509 sertifikatlarının quraşdırılması ehtiyacını aradan qaldırır

          Arızalardan qorunmaq üçün aktiv-passiv və ya aktiv-aktiv rejimdə birdən çox yük balanslaşdırıcı qurmaq adi haldır.

          Yük tarazlaşdırıcıları trafikləri müxtəlif göstəricilərə əsaslanaraq yönləndirə bilər:

          Layer 4 yük balanslaşdırıcıları istəklərin necə paylanacağına qərar vermək üçün nəqliyyat qatındakı məlumata baxırlar. Ümumiyyətlə, bu paketdəki məzmunu deyil, başlıqdakı mənbəyi, təyinat IP ünvanlarını və portları əhatə edir. Layer 4 yük balanslaşdırıcıları, şəbəkə paketlərini yuxarı serverə göndərir və şəbəkə ünvanı tərcüməsini (NAT) həyata keçirir.

          Layer 7 yük balanslaşdırıcıları istəklərin necə paylanacağına qərar vermək üçün tətbiq qatına baxırlar. Bu başlıq, mesaj və çərəzlərin məzmununa aid ola bilər. Layer 7 yük balanslaşdırıcıları şəbəkə trafiki dayandırır, mesajı oxuyur, yük balanslaşdırma qərarı verir, sonra seçilmiş serverlə əlaqə açır. Məsələn, bir qat 7 yük balanslaşdırıcısı video trafikini videoları yerləşdirən serverlərə yönəldə bilər, eyni zamanda daha həssas istifadəçi göndərmə trafikini təhlükəsizliklə sərtləşdirilmiş serverlərə yönəldə bilər.

          Esneklik bahasına, qat 4 yük balanslaşdırması, Lay 7-dən daha az vaxt və hesablama mənbələri tələb edir, baxmayaraq ki, müasir əmtəə avadanlıqlarında performans təsiri minimal ola bilər.

          Yük balanslaşdırıcıları, üfüqi miqyaslandırma, performans və mövcudluğu yaxşılaşdırmağa da kömək edə bilər. Əmtəə maşınlarından istifadə miqyasını azaltmaq daha sərfəlidir və daha bahalı olan bir serverin daha bahalı bir aparatda genişləndirilməsindən daha yüksək mövcudluqla nəticələnir. Şaquli miqyaslandırma. Əmtəə avadanlığı üzərində işləyən istedadlar üçün işə götürmək, ixtisaslaşmış müəssisə sistemlərindən daha asandır.

          Dezavantaj (lar): üfüqi miqyaslandırma

          • Ölçekleme, yatay olaraq mürəkkəbliyi təqdim edir və serverlərin klonlaşdırılmasını əhatə edir
            • Serverlər vətəndaşlığı olmayan olmalıdır: oturumlar və ya profil şəkilləri kimi istifadəçi ilə əlaqəli hər hansı bir məlumat daxil olmamalıdır
            • Sessiyalar bir verilənlər bazası (SQL, NoSQL) və ya davamlı bir önbellek (Redis, Memcached) kimi mərkəzləşdirilmiş bir məlumat mağazasında saxlanıla bilər.

            Dezavantaj (lər): yük balanslaşdırıcı

            • Yük balanslaşdırıcısı kifayət qədər mənbəyə sahib olmadıqda və ya düzgün bir şəkildə yapılandırılmadıqda bir performans darboğazına çevrilə bilər.
            • Tək bir uğursuzluq nöqtəsini aradan qaldırmağa kömək edəcək bir yük balanslaşdırıcısının tətbiqi mürəkkəbliyin artması ilə nəticələnir.
            • Tək yük balanslaşdırıcısı tək bir uğursuzluq nöqtəsidir, birdən çox yük balanslaşdırıcısını konfiqurasiya etmək mürəkkəbliyi daha da artırır.

            Mənbə (lər) və əlavə oxumaq

            Əks proxy, daxili xidmətləri mərkəzləşdirən və xalqa vahid interfeyslər təqdim edən bir veb serverdir. Müştərilərin istəkləri, əks proksi serverin müştəriyə cavabını qaytarmadan əvvəl onu yerinə yetirə bilən bir serverə göndərilir.

            Əlavə üstünlüklərə aşağıdakılar daxildir:

            • Təhlükəsizlik artır - Backend serverləri, qara siyahı IP-ləri, bir müştəri üçün məhdud sayda əlaqə haqqında məlumatları gizlədin
            • Ölçeklenebilirlik və elastiklik artmışdır - Müştərilər yalnız serverləri böyütməyə və ya onların konfiqurasiyasını dəyişdirməyə imkan verən əks proxy-nin IP-sini görürlər
            • SSL ləğvi - Gələn istəklərin şifrəsini açın və server cavablarını şifrələyin, beləliklə arxa serverlər bu potensial bahalı əməliyyatları yerinə yetirməli deyillər
              • Hər bir serverdə X.509 sertifikatlarının quraşdırılması ehtiyacını aradan qaldırır
              • HTML / CSS / JS
              • Şəkillər
              • Videolar
              • Və s

              Yük balanslaşdırıcısı və əks proksi

              • Yük balanslaşdırıcısının yerləşdirilməsi birdən çox serveriniz olduqda faydalıdır. Çox vaxt tarazlaşdırıcılar trafiki eyni funksiyanı yerinə yetirən bir sıra serverlərə ötürür.
              • Ters vəkillər yalnız bir veb server və ya tətbiqetmə serverində də faydalı ola bilər və əvvəlki hissədə izah edilən üstünlükləri açır.
              • NGINX və HAProxy kimi həllər həm təbəqə 7 əks proksi və yük balansını dəstəkləyə bilər.

              Dezavantaj (lər): əks proxy

              • Əks proxy təqdim etmək artan mürəkkəbliklə nəticələnir.
              • Tək bir əks proxy, tək bir uğursuzluq nöqtəsidir, birdən çox əks proksi konfiqurasiya etmək (yəni işdən çıxma) mürəkkəbliyi daha da artırır.

              Mənbə (lər) və əlavə oxumaq

              Veb qatını tətbiq qatından ayırmaq (platforma təbəqəsi olaraq da bilinir) hər iki təbəqəni müstəqil olaraq miqyaslandırmağa və konfiqurasiya etməyə imkan verir. Yeni bir API əlavə etmək mütləq əlavə veb server əlavə etmədən tətbiqetmə serverlərini əlavə etməklə nəticələnir. The vahid məsuliyyət prinsipi birlikdə işləyən kiçik və muxtar xidmətlər üçün vəkil. Kiçik xidmətləri olan kiçik komandalar sürətli böyümə üçün daha aqressiv şəkildə plan qura bilərlər.

              Tətbiq qatındakı işçilər eyni zamanda asenkronizmin təmin edilməsinə kömək edirlər.

              Bu müzakirə ilə əlaqəli olaraq müstəqil yerləşdirilə bilən, kiçik, modul xidmətlər dəsti kimi təsvir edilə bilən mikroservislərdir. Hər xidmət özünəməxsus bir prosesi həyata keçirir və iş məqsədinə xidmət etmək üçün yaxşı müəyyən edilmiş, yüngül bir mexanizm vasitəsilə əlaqə qurur. 1

              Məsələn, Pinterest aşağıdakı mikroservislərə sahib ola bilər: istifadəçi profili, izləyici, lent, axtarış, foto yükləmə və s.

              Konsul, Etcd və Zookeeper kimi sistemlər qeydiyyatdan keçmiş adları, ünvanları və limanları izləyərək xidmətlərin bir-birlərini tapmasına kömək edə bilər. Sağlamlıq yoxlamaları xidmətin bütövlüyünü yoxlamağa kömək edir və tez-tez HTTP son nöqtəsi istifadə olunur. Həm Konsul, həm də Etcd, konfiqurasiya dəyərlərini və digər paylaşılan məlumatları saxlamaq üçün faydalı ola biləcək bir əsas dəyər deposuna sahibdirlər.

              Dezavantaj (lər): tətbiq qat

              • Sərbəst şəkildə birləşdirilmiş xidmətlər ilə bir tətbiq qatının əlavə edilməsi, memarlıq, əməliyyatlar və proses baxımından fərqli bir yanaşma tələb edir (monolitik sistemə qarşı).
              • Mikroservislər yerləşdirmə və əməliyyat baxımından mürəkkəblik əlavə edə bilər.

              Mənbə (lər) və əlavə oxumaq

              Əlaqəli verilənlər bazası idarəetmə sistemi (RDBMS)

              SQL kimi bir əlaqəli verilənlər bazası, cədvəllərdə təşkil edilmiş məlumatların toplusudur.

              Turşu əlaqəli verilənlər bazası əməliyyatlarının xüsusiyyətlərinin məcmusudur.

              • Atomluq - Hər əməliyyat tamamilə və ya heç bir şey deyil
              • Ardıcıllıq - Hər hansı bir əməliyyat verilənlər bazasını bir etibarlı vəziyyətdən digərinə gətirəcəkdir
              • İzolə - Əməliyyatları eyni vaxtda icra etmək, əməliyyatlar ardıcıl olaraq həyata keçirildiyi ilə eyni nəticələrə malikdir
              • Davamlılıq - Bir əməliyyat edildikdən sonra belə qalacaq

              Bir əlaqəli verilənlər bazasını genişləndirmək üçün bir çox texnika var: master-kölə təkrarlanması, master-master təkrarlanması, federasiya, qırmaq, denormalizasiyaSQL tənzimlənməsi.

              Ağa yalnız oxumağa xidmət edən bir və ya daha çox köləyə yazıları təkrarlayaraq oxuyur və yazır. Qullar əlavə qullara da ağac kimi bir şəkildə təkrarlaya bilərlər. Master oflayn olarsa, qul bir usta yüksəlməyincə və ya yeni bir master təmin olunana qədər sistem yalnız oxumaq rejimində işləyə bilər.

              Dezavantaj (lər): master-kölə təkrarlanması

              • Bir qulu ağaya yüksəltmək üçün əlavə məntiq lazımdır.
              • Dezavantaj (lar) a baxın: ilə əlaqəli məqamların təkrarlanması həm də ağa-kölə və ağa-ağa.

              Hər iki usta oxuyur və yazır və yazılarda bir-biri ilə koordinasiya edir. Hər iki usta aşağı düşərsə, sistem həm oxuyur, həm də yazır ilə işləməyə davam edə bilər.

              Dezavantaj (lər): master-master təkrarlanması

              • Bir yük balanslaşdırıcıya ehtiyacınız olacaq və ya harada yazacağınızı təyin etmək üçün tətbiqetmə məntiqinizdə dəyişiklik etməlisiniz.
              • Master-master sistemlərinin əksəriyyəti ya sərbəst şəkildə uyğundur (ACID-i pozur) və ya sinxronizasiya səbəbindən yazma gecikməsini artırdı.
              • Münaqişə həlli, daha çox yazma düyünləri əlavə olunduqca və gecikmə artdıqca daha çox oyuna girir.
              • Dezavantaj (lar) a baxın: ilə əlaqəli məqamların təkrarlanması hər ikisi ağa-kölə və ağa-ağa.
              • Yeni yazılmış məlumatların digər qovşaqlara təkrarlanmasından əvvəl master uğursuz olarsa, məlumat itkisi ehtimalı var.
              • Yazılar oxunan replikalara təkrarlanır. Bir çox yazı varsa, oxunan replikalar təkrar oxuma ilə qarışa bilər və o qədər oxuya bilməz.
              • Daha çox oxunan qullar, daha çox təkrarlamalısınız, bu da daha çox təkrarlanma gecikməsinə səbəb olur.
              • Bəzi sistemlərdə ustaya yazmaq, paralel yazmaq üçün birdən çox mövzuya səbəb ola bilər, oxunan replikalar yalnız bir iplə ardıcıl yazmağı dəstəkləyir.
              • Replikasiya daha çox hardware və əlavə mürəkkəblik əlavə edir.

              Mənbə (lər) və əlavə oxu: təkrarlama

              Federasiya (və ya funksional bölmə) verilənlər bazalarını funksiyaya görə bölür. Məsələn, tək, monolitik bir verilənlər bazası əvəzinə üç məlumat bazasına sahib ola bilərsiniz: forumlar, istifadəçilərməhsullar, hər verilənlər bazasına daha az oxuma və yazma trafiği və bu səbəbdən daha az təkrarlanma gecikməsi ilə nəticələnir. Kiçik verilənlər bazaları, yaddaşa sığacaq daha çox məlumatla nəticələnir və bu da təkmilləşdirilmiş cache lokalizasiyası sayəsində daha çox önbellek vurması ilə nəticələnir. Heç bir mərkəzi master seriyalaşdırma yazmazsa, iş qabiliyyətini artıraraq paralel yaza bilərsiniz.

              • Şemanız böyük funksiyalar və ya cədvəllər tələb edirsə, Federasiya təsirli deyil.
              • Hansı verilənlər bazasını oxuyub yazacağını müəyyənləşdirmək üçün tətbiqetmə məntiqinizi yeniləməlisiniz.
              • İki verilənlər bazasından məlumatların birləşdirilməsi bir server bağlantısı ilə daha mürəkkəbdir.
              • Federasiya daha çox avadanlıq və əlavə mürəkkəblik əlavə edir.

              Mənbə (lər) və əlavə oxu: federasiya

              Sharding, məlumatları müxtəlif verilənlər bazaları arasında bölüşdürür ki, hər verilənlər bazası yalnız məlumatların alt hissəsini idarə edə bilsin. Bir istifadəçi verilənlər bazasını nümunə götürərək, istifadəçi sayı artdıqca klasterə daha çox qırıntı əlavə olunur.

              Federasiyanın üstünlüklərinə bənzəyən, qırılma daha az oxunma və yazma trafiki, daha az təkrarlanma və daha çox önbellek vurması ilə nəticələnir. İndeks ölçüsü də azalır, bu da ümumiyyətlə daha sürətli sorğularla performansı artırır. Bir qırıntı aşağı düşərsə, digər qırıntılar hələ də işləyir, baxmayaraq ki, məlumatların itirilməməsi üçün bir növ təkrarlama əlavə etmək lazımdır. Federasiya kimi, artan məhsuldarlıq ilə paralel yazmağınıza imkan verən bir də mərkəzi yazı seriallaşdırma yoxdur.

              Bir istifadəçi cədvəlini qırmaq üçün ümumi yollar ya istifadəçinin soyadı, ya da istifadəçinin coğrafi yerləşməsi yolu ilə aparılır.

              • Parçalarla işləmək üçün tətbiq məntiqinizi yeniləməlisiniz, bu da mürəkkəb SQL sorğuları ilə nəticələnə bilər.
              • Məlumat bölüşdürülməsi kəskin bir vəziyyətdə ola bilər. Məsələn, qırıntıdakı bir sıra güc istifadəçiləri, bu qəlpəyə digərlərinə nisbətən artan yüklə nəticələnə bilər.
                • Yenidən tarazlıq əlavə mürəkkəblik əlavə edir. Ardıcıl silməyə əsaslanan qırılma funksiyası ötürülən məlumatların miqdarını azalda bilər.

                Mənbə (lər) və əlavə oxu: qırılma

                Denormalizasiya bəzi yazma performansı hesabına oxu performansını yaxşılaşdırmağa çalışır.Verilənlərin artıq nüsxələri bahalı birləşmələrin qarşısını almaq üçün birdən çox cədvəldə yazılır. PostgreSQL və Oracle kimi bəzi RDBMSlər, lazımsız məlumatların saxlanması və lazımsız nüsxələrin ardıcıl saxlanılması işini həyata keçirən materialları təsdiqləyir.

                Verilənlər federasiya və qırılma kimi texnika ilə paylandıqdan sonra, məlumat mərkəzlərindəki birləşmələrin idarə edilməsi mürəkkəbliyi daha da artırır. Normaldan kənarlaşdırma bu cür mürəkkəb birləşmələr ehtiyacını aradan qaldıra bilər.

                Əksər sistemlərdə oxumaq 100: 1 və ya hətta 1000: 1 sayından çox ola bilər. Mürəkkəb bir verilənlər bazasına qoşulma ilə nəticələnən bir oxu, disk əməliyyatlarına xeyli vaxt sərf edərək çox bahalı ola bilər.

                • Məlumat təkrarlanır.
                • Məhdudiyyətlər, məlumatların lazımsız nüsxələrinin sinxronlaşmasına kömək edə bilər ki, bu da verilənlər bazası dizaynının mürəkkəbliyini artırır.
                • Ağır yazma yükü altında normallaşdırılmış bir verilənlər bazası, normallaşdırılmış həmkarından daha pis nəticə verə bilər.

                Mənbə (lər) və əlavə oxu: denormalizasiya

                SQL tənzimlənməsi geniş bir mövzudur və bir çox kitab istinad kimi yazılmışdır.

                Bu vacibdir etalonprofil darlıqları simulyasiya etmək və açmaq.

                • Qiymətləndirmə - Ab kimi alətlərlə yüksək yüklü vəziyyətləri simulyasiya edin.
                • Profil - Performans problemlərini izləməyə kömək etmək üçün yavaş sorğu qeydləri kimi alətləri aktivləşdirin.

                Qiymətləndirmə və profilləşdirmə sizi aşağıdakı optimallaşdırmalara yönəldə bilər.

                • MySQL sürətlə daxil olmaq üçün bitişik bloklarda diskə atılır.
                • Sabit uzunluqlu sahələr üçün VARCHAR yerinə CHAR istifadə edin.
                  • CHAR effektiv şəkildə sürətli, təsadüfi giriş imkanı verir, halbuki VARCHAR ilə birinə keçmədən əvvəl simli ucunu tapmalısınız.
                  • Sorğu etdiyiniz sütunlar (SEÇ, GROUP BY, SİFARİŞ BY, QOŞULUN) indekslərlə daha sürətli ola bilər.
                  • İndekslər ümumiyyətlə məlumatların çeşidlənməsini təmin edən və axtarışlara, ardıcıl girişə, daxilolmalara və silinmələrə imkan verən, özünü tarazlaşdıran B ağacı kimi təqdim olunur.
                  • İndeksin yerləşdirilməsi məlumatları yaddaşda saxlayaraq daha çox yer tələb edə bilər.
                  • İndeksin də yenilənməsi lazım olduğundan yazılar daha yavaş ola bilər.
                  • Böyük miqdarda məlumat yükləyərkən, indeksləri söndürmək, məlumatları yükləmək və indeksləri yenidən qurmaq daha sürətli ola bilər.

                  Mənbə (lər) və əlavə oxu: SQL tənzimlənməsi

                  NoSQL, a-da təmsil olunan məlumatların toplusudur əsas dəyər mağazası, sənəd mağazası, geniş sütun mağazasıvə ya a qraf verilənlər bazası. Məlumatlar normallaşdırılır və qoşulmalar ümumiyyətlə tətbiq kodunda aparılır. Əksər NoSQL mağazalarında əsl ACID əməliyyatları yoxdur və nəticədə ardıcıllığa üstünlük verilir.

                  BAZ tez-tez NoSQL verilənlər bazalarının xüsusiyyətlərini təsvir etmək üçün istifadə olunur. CAP Teoremi ilə müqayisədə BASE uyğunluğu yox, mövcudluğu seçir.

                  • Əsasən mövcuddur - sistem mövcudluğu təmin edir.
                  • Yumşaq vəziyyət - sistemin vəziyyəti zamanla, hətta giriş olmadan da dəyişə bilər.
                  • Sonda tutarlılıq - sistem bu müddət ərzində giriş qəbul etmədiyi üçün müəyyən bir müddət ərzində ardıcıl olacaqdır.

                  SQL və ya NoSQL arasında seçim etməklə yanaşı, hansı növ NoSQL verilənlər bazasının istifadə hallarınıza ən uyğun olduğunu başa düşmək faydalıdır. Nəzərdən keçirəcəyik əsas dəyər mağazaları, sənəd mağazaları, geniş sütun mağazalarqraf verilənlər bazaları növbəti hissədə.

                  Əsas dəyər mağazası ümumiyyətlə O (1) oxumağa və yazmağa imkan verir və çox vaxt yaddaş və ya SSD ilə dəstəklənir. Məlumat mağazaları açarları leksikoqrafik qaydada saxlayaraq açar aralıqların səmərəli alınmasına imkan yaradır. Açar dəyərli mağazalar metadatların dəyərlə saxlanmasına imkan verə bilər.

                  Əsas dəyər mağazaları yüksək performans təmin edir və tez-tez sadə məlumat modelləri və ya yaddaş içi önbellek qat kimi sürətlə dəyişən məlumatlar üçün istifadə olunur. Yalnız məhdud əməliyyatlar dəsti təklif etdikləri üçün əlavə əməliyyatlara ehtiyac olduqda mürəkkəblik tətbiq qatına keçir.

                  Açar dəyərli bir mağaza sənəd deposu və bəzi hallarda qraf bazası kimi daha mürəkkəb sistemlər üçün əsasdır.

                  Mənbə (lər) və əlavə oxu: əsas dəyər deposu

                  Abstraksiya: dəyər kimi saxlanılan sənədlərlə açar dəyər deposu

                  Sənəd deposu sənədlərin (XML, JSON, ikili və s.) Ətrafında mərkəzləşmişdir, burada sənəd müəyyən bir obyekt üçün bütün məlumatları saxlayır. Sənəd mağazaları sənədin daxili quruluşuna əsasən sorğu üçün API və ya sorğu dili təqdim edir. Diqqət yetirin ki, bir çox açar dəyərli mağazalar bu iki saxlama növü arasındakı xətləri bulanaraq bir dəyər metadatası ilə işləmək üçün xüsusiyyətlərə malikdir.

                  Əsas tətbiqetməyə əsasən sənədlər kolleksiyalar, etiketlər, metadata və ya dizinlər tərəfindən təşkil edilir. Sənədlər düzəldilə və ya qruplaşdırıla bilsə də, sənədlərdə bir-birindən tamamilə fərqli sahələr ola bilər.

                  MongoDB və CouchDB kimi bəzi sənəd mağazalarında da mürəkkəb sorğuların yerinə yetirilməsi üçün SQL-ə bənzər bir dil verilir. DynamoDB həm əsas dəyərləri, həm də sənədləri dəstəkləyir.

                  Sənəd mağazaları yüksək elastiklik təmin edir və tez-tez dəyişən məlumatlarla işləmək üçün istifadə olunur.

                  Mənbə (lər) və əlavə oxu: sənəd mağazası

                  Abstraksiya: iç içə xəritə SütunAilə & ltRowKey, Sütunlar və ltColKey, Dəyər, Zaman damgası & gt & gt

                  Geniş sütunlu mağazanın əsas məlumat vahidi bir sütundur (ad / dəyər cütü). Bir sütun sütun ailələrində qruplaşdırıla bilər (SQL cədvəlinə bənzər). Super sütun ailələri ayrıca qrup sütun ailələri. Hər bir sütuna bir sıra açarı ilə müstəqil olaraq daxil ola bilərsiniz və eyni satır düyməsinə sahib olan sütunlar bir sıra təşkil edir. Hər bir dəyər, versiya və ziddiyyətlərin həlli üçün zaman damgası ehtiva edir.

                  Google, Bigtable'ı Hadoop ekosistemində tez-tez istifadə edilən açıq mənbəli HBase və Facebook'dan Cassandra'yı təsir edən ilk geniş sütun mağazası olaraq tanıdıb. BigTable, HBase və Cassandra kimi mağazalar açarları leksikoqrafik qaydada saxlayır və seçici açar aralıqların səmərəli alınmasına imkan verir.

                  Geniş sütunlu mağazalar yüksək mövcudluq və yüksək ölçeklenebilirlik təqdim edir. Bunlar çox vaxt çox böyük məlumat dəstləri üçün istifadə olunur.

                  Mənbə (lər) və əlavə oxu: geniş sütun mağazası

                  Qrafik verilənlər bazasında hər bir qovşaq bir qeyddir və hər bir yay iki qovşaq arasındakı əlaqədir. Qrafik verilənlər bazaları bir çox xarici düymələrlə və ya çoxdan-çoxlu münasibətlərlə kompleks əlaqələri təmsil etmək üçün optimallaşdırılmışdır.

                  Qrafik verilənlər bazaları, sosial şəbəkə kimi kompleks əlaqələri olan məlumat modelləri üçün yüksək performans təklif edir. Bunlar nisbətən yenidir və hələ geniş istifadə olunmur, inkişaf alətləri və mənbələri tapmaq daha çətin ola bilər. Bir çox qrafikə yalnız REST API ilə müraciət etmək olar.

                  Mənbə (lər) və əlavə oxu: qrafik

                  Mənbə (lər) və əlavə oxu: NoSQL

                  Səbəbləri SQL:

                  • Strukturlaşdırılmış məlumatlar
                  • Ciddi sxem
                  • Əlaqəli məlumatlar
                  • Kompleks birləşmələrə ehtiyac var
                  • Əməliyyatlar
                  • Ölçekleme üçün təmiz naxışlar
                  • Daha çox qurulmuşdur: inkişaf etdiricilər, icma, kod, alətlər və s
                  • İndeksə görə axtarışlar çox sürətlidir

                  Səbəbləri NoSQL:

                  • Yarı strukturlaşdırılmış məlumatlar
                  • Dinamik və ya çevik şema
                  • Qeyri-əlaqəli məlumatlar
                  • Kompleks birləşmələrə ehtiyac yoxdur
                  • Bir çox TB (və ya PB) məlumatını saxlayın
                  • Çox məlumat intensiv iş yükü
                  • IOPS üçün çox yüksək məhsuldarlıq

                  NoSQL üçün çox uyğun olan nümunə məlumatları:

                  • Klik axını və giriş məlumatlarının sürətlə alınması
                  • Liderlər cədvəli və ya hesablama məlumatları
                  • Alış-veriş sepeti kimi müvəqqəti məlumatlar
                  • Tez-tez daxil olan ('isti') masalar
                  • Metadata / axtarış masaları

                  Mənbə (lər) və əlavə oxu: SQL və ya NoSQL

                  Keşləmə, səhifə yükləmə müddətlərini yaxşılaşdırır və serverlərinizdə və məlumat bazalarınızdakı yükü azalda bilər. Bu modeldə dispetçer, əvvəllər sorğu edilmişsə axtarış aparacaq və gerçək icraya qənaət etmək üçün əvvəlki nəticəni geri qaytarmağa çalışacaq.

                  Verilənlər bazaları, bölmələr arasında oxuduğun və yazdığın vahid paylanmasından faydalanır. Məşhur əşyalar dağılımı təhrif edə bilər və bu da darboğazlara səbəb olur. Bir verilənlər bazası önünə bir önbellek qoymaq, trafikdəki qeyri-bərabər yükləri və tırmanışları mənimsəməyə kömək edə bilər.

                  Önbellekler müştəri tərəfində (OS və ya brauzer), server tərəfində və ya fərqli bir önbellek qatında yerləşə bilər.

                  CDN-lər bir önbellek növü hesab olunur.

                  Varnish kimi əks proksi və önbellekler birbaşa statik və dinamik məzmuna xidmət edə bilər. Veb serverləri istəkləri önbelleğe alaraq, tətbiq serverləri ilə əlaqə qurmadan cavabları qaytarır.

                  Veritabanınız ümumiyyətlə ümumi istifadə vəziyyəti üçün optimallaşdırılmış bir standart konfiqurasiyada bir neçə səviyyəli önbelleği ehtiva edir. Xüsusi istifadə qaydaları üçün bu parametrləri düzəltmək performansı daha da artıra bilər.

                  Memcached və Redis kimi yaddaş içi önbellekleriniz tətbiqetmə ilə məlumat anbarınız arasındakı açar dəyərli mağazalardır. Məlumat RAM-də saxlanıldığından, məlumatların diskdə saxlandığı tipik verilənlər bazalarından daha sürətli olur. RAM diskdən daha məhduddur, buna görə ən az istifadə edilmiş (LRU) kimi önbelleği etibarsızlaşdırma alqoritmləri 'soyuq' girişlərin etibarsız olmasına və 'isti' məlumatların RAM-da saxlanmasına kömək edə bilər.

                  Redis aşağıdakı əlavə xüsusiyyətlərə malikdir:

                  Önbelleğe ala biləcəyiniz iki ümumi kateqoriyaya aid çox səviyyələr var: verilənlər bazası sorğularıobyektlər:

                  • Sıra səviyyəsi
                  • Sorğu səviyyəsində
                  • Tamamilə əmələ gələn serializasiyalı obyektlər
                  • Tamamilə işlənmiş HTML

                  Ümumiyyətlə, klonlaşdırma və avtomatik miqyaslaşdırmağı çətinləşdirdiyindən fayl əsaslı önbelleğe alınmamağa çalışmalısınız.

                  Verilənlər bazası sorğu səviyyəsində önbelleğe alma

                  Veritabanını nə zaman soruşsanız, sorğunu açar olaraq qarışdırın və nəticəni önbelleğe yazın. Bu yanaşma müddət bitmə problemindən əziyyət çəkir:

                  • Keşli bir nəticəni mürəkkəb sorğularla silmək çətindir
                  • Bir cədvəl hüceyrəsi kimi bir məlumat parçası dəyişirsə, dəyişdirilmiş xanaya daxil ola biləcək bütün önbelleğe alınmış sorğuları silməlisiniz

                  Nesne səviyyəsində önbelleğe alma

                  Tətbiq kodunuzla etdiklərinizə bənzər məlumatlara bir obyekt kimi baxın. Tətbiqinizdən verilənlər bazasını bir verilənlər nümunəsinə və ya bir məlumat quruluşuna yığın:

                  • Əsas məlumatları dəyişibsə, obyekti önbellekdən silin
                  • Asinxron işlənməyə imkan verir: işçilər ən son keşləşdirilmiş obyekti istehlak edərək obyektləri yığırlar

                  Nəyin önbelleğe alınacağına dair təkliflər:

                  • İstifadəçi sessiyaları
                  • Tamamilə göstərilən veb səhifələr
                  • Fəaliyyət axınları
                  • İstifadəçi qrafik məlumatları

                  Yalnız məhdud sayda məlumatı önbellekte saxlaya bildiyiniz üçün istifadə vəziyyətiniz üçün hansı önbellek yeniləmə strategiyasının ən yaxşı işlədiyini təyin etməlisiniz.

                  Tətbiq anbardan oxumaq və yazmaqdan məsuldur. Önbellek birbaşa yaddaş ilə qarşılıqlı təsir göstərmir. Tətbiq aşağıdakıları edir:

                  • Önbelleğe giriş axtarın və nəticədə bir önbellek qaçırılsın
                  • Verilənlər bazasından giriş yükləyin
                  • Önbelleğe giriş əlavə edin
                  • Giriş qayıt

                  Memcached ümumiyyətlə bu şəkildə istifadə olunur.

                  Önbelleğe əlavə edilmiş məlumatların sonrakı oxunuşları sürətli olur. Önbelleğe bir yana, tənbəl yükləmə də deyilir. Yalnız tələb olunan məlumatlar önbelleğe alınır, bu da önbelleğin istənilməyən məlumatlarla doldurulmasının qarşısını alır.

                  • Hər bir cache miss üç nəzərəçarpacaq bir gecikməyə səbəb ola bilər.
                  • Verilənlər bazasında güncəlləşdikdə məlumatlar köhnələ bilər. Bu problem, önbellek girişinin yenilənməsinə məcbur edən bir ömrü (TTL) təyin etməklə və ya yazma istifadə edərək azaldılır.
                  • Bir düyün uğursuz olduqda, yeni, boş bir düyünlə əvəzlənir, gecikmə artır.

                  Tətbiq, məlumatları oxumaq və yazmaq üçün əsas məlumat deposu kimi önbelleği istifadə edir, önbellek verilənlər bazasına oxumaq və yazmaqdan məsuldur:

                  • Tətbiq önbelleğe giriş əlavə edir / yeniləyir
                  • Önbellek sinxron olaraq məlumat deposuna giriş yazır
                  • Qayıt

                  Yazma, yazma əməliyyatı sayəsində yavaş bir ümumi əməliyyatdır, ancaq yalnız yazılmış məlumatların sonrakı oxunuşları sürətli olur. İstifadəçilər ümumiyyətlə məlumatları oxuyarkən məlumatları yeniləyərkən gecikməyə daha çox dözürlər. Önbellekdəki məlumatlar köhnə deyil.

                  Dezavantaj (lər): yazmaq

                  • Arızalanma və ya miqyaslandırma səbəbindən yeni bir qovşaq yaradıldıqda, giriş verilənlər bazasında yenilənməyincə yeni qovşaq girişləri önbelleğe almayacaq. Önbelleği yazma ilə birlikdə bu problemi azalda bilər.
                  • Yazılan əksər məlumatlar heç vaxt oxuna bilməz, bu da TTL ilə minimuma endirilə bilər.

                  Arxasında yazmaq üçün tətbiqetmə aşağıdakıları edir:

                  • Önbelleğe giriş əlavə edin / yeniləyin
                  • Asenkron bir şəkildə məlumat deposuna giriş yazaraq yazma performansını yaxşılaşdırın
                  • Önbellek, məzmunu məlumat deposuna dəymədən əvvəl azalsa, məlumat itkisi ola bilər.
                  • Arxada yazmağı həyata keçirmək, cache kənara qoyma və ya yazma yolu ilə həyata keçirməkdən daha mürəkkəbdir.

                  Önbelleği, son istifadə müddətindən əvvəl yaxın vaxtlarda əldə edilmiş hər hansı bir önbellek girişini avtomatik olaraq yeniləmək üçün konfiqurasiya edə bilərsiniz.

                  Əvvəlcədən yenilənmə, önbellek gələcəkdə hansı maddələrin lazım olacağını ehtimal etdiyini dəqiq şəkildə proqnozlaşdıra bilsə gecikmə ilə oxunma müddətinin azalmasına səbəb ola bilər.

                  • Gələcəkdə hansı maddələrə ehtiyac olacağını dəqiq proqnozlaşdırmamaq, yenilənmədən daha az performansla nəticələnə bilər.
                  • Önbellekler və verilənlər bazası kimi həqiqət mənbəyi arasında tutarlılığı qorumaq lazımdır.
                  • Cache etibarsızlığı çətin bir problemdir, önbelleğin nə vaxt yeniləməsi ilə əlaqəli əlavə bir mürəkkəblik var.
                  • Redis əlavə etmək və ya memcached əlavə etmək kimi tətbiq dəyişiklikləri etməlisiniz.

                  Mənbə (lər) və əlavə oxumaq

                  Asenkron iş axınları, əks təqdirdə sıra içində yerinə yetiriləcək bahalı əməliyyatlar üçün tələb müddətlərini azaltmağa kömək edir. Verilənlərin vaxtaşırı toplanması kimi əvvəlcədən vaxt aparan bir iş görərək kömək edə bilərlər.

                  Mesaj növbələri mesajları qəbul edir, saxlayır və çatdırır. Sətir içində bir əməliyyat çox yavaş olarsa, aşağıdakı iş axını ilə bir mesaj növbəsindən istifadə edə bilərsiniz:

                  • Tətbiq növbəni bir işi dərc edir, sonra istifadəçiyə iş vəziyyəti barədə məlumat verir
                  • Bir işçi işi növbədən götürür, işləyir, sonra işin bitdiyini bildirir

                  İstifadəçi bloklanmır və iş arxa planda işlənir. Bu müddət ərzində müştəri isteğe bağlı olaraq tapşırığın bitmiş kimi görünməsi üçün az miqdarda işləmə apara bilər. Məsələn, bir tweet göndərirsinizsə, tweet dərhal zaman çizelgenize göndərilə bilər, ancaq tweetinizin bütün izləyicilərinizə çatdırılmasından əvvəl bir müddət çəkə bilər.

                  Redis sadə bir mesaj vasitəçisi kimi faydalıdır, lakin mesajlar itirə bilər.

                  RabbitMQ populyardır, ancaq 'AMQP' protokoluna uyğunlaşmağınızı və öz qovşaqlarınızı idarə etməyinizi tələb edir.

                  Amazon SQS yerləşdirilir, lakin yüksək gecikməyə malikdir və mesajların iki dəfə çatdırılma ehtimalı var.

                  Tapşırıq növbələri tapşırıqları və bunlarla əlaqəli məlumatları alır, onları işlədir, sonra nəticələrini verir. Planlaşdırmanı dəstəkləyə bilərlər və arxa planda hesablama baxımından intensiv işlərin aparılması üçün istifadə edilə bilər.

                  Kərəviz planlaşdırma üçün dəstəyi var və ilk növbədə python dəstəyi var.

                  Növbələr əhəmiyyətli dərəcədə böyüməyə başlayırsa, növbə ölçüsü yaddaşdan daha böyük ola bilər və nəticədə önbellek qaçırılır, disk oxunur və daha da yavaş işlənir. Arxa təzyiq növbə ölçüsünü məhdudlaşdırmaqla kömək edə bilər və bununla da növbədə olan iş yerləri üçün yüksək işləmə sürətini və yaxşı cavab müddətlərini qoruyur. Növbə dolduqdan sonra müştərilər bir serverlə məşğul olur və ya daha sonra yenidən cəhd etmək üçün HTTP 503 status kodunu alır. Müştərilər sorğunu daha sonra, bəlkə də üst səviyyəli geri çəkilmə ilə yenidən edə bilərlər.

                  • Ucuz hesablamalar və real vaxt iş axınları kimi hallardan istifadə sinxron əməliyyatlar üçün daha uyğun ola bilər, çünki növbələrin tətbiqi gecikmə və mürəkkəblik yarada bilər.

                  Mənbə (lər) və əlavə oxumaq

                  Hypertext transfer protokolu (HTTP)

                  HTTP, müştəri ilə server arasında məlumatların kodlaşdırılması və daşınması üçün bir üsuldur. Bu bir sorğu / cavab protokoludur: müştərilər sorğu verirlər və serverlər müvafiq məzmuna və sorğu haqqında tamamlama statusu məlumatlarına cavab verir. HTTP, istəklərin və cavabların yük balanslaşdırma, önbelleğe alma, şifrələmə və sıxılma funksiyalarını həyata keçirən bir çox ara marşrutlaşdırıcıdan və serverdən keçməsinə imkan yaradan müstəqildir.

                  Əsas HTTP istəyi bir feldən (metoddan) və bir mənbədən (son nöqtədən) ibarətdir. Aşağıda ümumi HTTP felləri verilmişdir:

                  Fe'l Təsvir Müvəkkil * Təhlükəsiz Cacheable
                  GET Mənbə oxuyur Bəli Bəli Bəli
                  POST Bir qaynaq yaradır və ya məlumatları idarə edən bir prosesi tetikler Yox Yox Bəli, cavabda təravət məlumatı varsa
                  QOY Bir qaynaq yaradır və ya əvəz edir Bəli Yox Yox
                  Yamaq Bir mənbəyi qismən yeniləyir Yox Yox Bəli, cavabda təravət məlumatı varsa
                  SİL Bir mənbəyi silir Bəli Yox Yox

                  * Fərqli nəticələr olmadan dəfələrlə çağırıla bilər.

                  HTTP kimi aşağı səviyyəli protokollara güvənən bir tətbiq qat protokoludur TCPUDP.

                  Mənbə (lər) və əlavə oxu: HTTP

                  Şanzıman nəzarət protokolu (TCP)

                  TCP, bir IP şəbəkəsi üzərindəki əlaqə yönümlü bir protokoldur. Bağlantı bir əl sıxma istifadə edərək qurulur və sona çatır. Göndərilən bütün paketlərin hədəfə orijinal qaydada və pozulmadan çatması təmin olunur:

                  Göndərən düzgün cavab almasa, paketləri yenidən göndərəcəkdir. Bir neçə dəfə fasilə varsa, əlaqə kəsilir. TCP ayrıca axın nəzarətini və tıxanma nəzarətini həyata keçirir. Bu zəmanətlər gecikmələrə səbəb olur və ümumiyyətlə UDP-dən daha az ötürmə ilə nəticələnir.

                  Yüksək iş qabiliyyətini təmin etmək üçün veb serverlər çox sayda TCP əlaqəsini açıq saxlaya bilər və nəticədə yüksək yaddaş istifadəsi mümkündür. Veb server mövzuları ilə memcached server arasında çox sayda açıq əlaqənin olması baha başa gələ bilər. Bağlantı hovuzu, lazım olduğu yerlərdə UDP-yə keçiddən əlavə kömək edə bilər.

                  TCP yüksək etibarlılıq tələb edən, lakin daha az vaxt tələb edən tətbiqetmələr üçün faydalıdır. Bəzi nümunələrə veb serverlər, verilənlər bazası məlumatları, SMTP, FTP və SSH daxildir.

                  • Sağlam olmaq üçün bütün məlumatlara ehtiyacınız var
                  • Şəbəkə qabiliyyətini avtomatik olaraq ən yaxşı qiymətləndirmək üçün istifadə etmək istəyirsiniz

                  İstifadəçi diaqram protokolu (UDP)

                  UDP bağlantısızdır. Dataqramlara (paketlərə bənzər) yalnız dataqram səviyyəsində zəmanət verilir. Dataqramlar təyinatlara sıradan çıxa bilər və ya heç çatmır. UDP, tıxanma nəzarətini dəstəkləmir. TCP dəstəyinin zəmanəti olmadan UDP ümumiyyətlə daha səmərəlidir.

                  UDP alt şəbəkədəki bütün cihazlara dataqramlar göndərərək yayımlaya bilər. Bu DHCP ilə faydalıdır, çünki müştəri hələ bir IP ünvanı almamışdır, beləliklə TCP-nin IP ünvanı olmadan axınının qarşısını alır.

                  UDP daha az etibarlıdır, lakin VoIP, video söhbət, axın və real vaxt çox oyunlu oyunlar kimi real vaxt istifadə hallarında yaxşı işləyir.

                  • Ən aşağı gecikməyə ehtiyacınız var
                  • Gec məlumatlar, məlumat itkisindən daha pisdir
                  • Öz səhv düzəlişinizi həyata keçirmək istəyirsiniz

                  Mənbə (lər) və əlavə oxunuş: TCP və UDP

                  Uzaqdan prosedur çağırışı (RPC)

                  Bir RPC-də bir müştəri prosedurun fərqli bir ünvan məkanında, ümumiyyətlə uzaq bir serverdə icra edilməsinə səbəb olur. Prosedura sanki lokal prosedur çağırışı kimi kodlanır, müştəri proqramından serverlə əlaqə qurmağın təfərrüatlarını götürür. Uzaq zənglər ümumiyyətlə yerli zənglərdən daha yavaş və daha az etibarlı olur, beləliklə RPC zənglərini yerli zənglərdən ayırmaq faydalıdır. Məşhur RPC çərçivələrinə Protobuf, Thrift və Avro daxildir.

                  RPC bir sorğu-cavab protokoludur:

                  • Müştəri proqramı - Müştəri stub proseduruna zəng edir. Parametrlər lokal prosedur çağırışı kimi yığının üzərinə sıxışdırılır.
                  • Müştəri stub proseduru - Marşallar (paketlər) proseduru id və bir sorğu mesajı daxilində arqumentlər.
                  • Müştəri rabitə modulu - OS müştəridən mesajı serverə göndərir.
                  • Server rabitə modulu - ƏS daxil olan paketləri server stub proseduruna ötürür.
                  • Server stub proseduru - Nəticələri bölüşdürür, prosedur idinə uyğun gələn server prosedurunu çağırır və verilən arqumentləri ötürür.
                  • Serverin cavabı yuxarıdakı addımları tərs qaydada təkrarlayır.

                  RPC davranışları ifşa etməyə yönəlmişdir. RPC-lər tez-tez daxili rabitə ilə performans səbəbləri üçün istifadə olunur, çünki istifadə hallarına daha yaxşı uyğunlaşmaq üçün yerli zəngləri hazırlaya bilərsiniz.

                  Yerli bir kitabxana seçin (aka SDK):

                  • Hədəf platformanızı bilirsiniz.
                  • "Məntiqinizə" necə çatdığına nəzarət etmək istəyirsiniz.
                  • Kitabxananızda səhv nəzarətinin necə baş verdiyini nəzarət etmək istəyirsiniz.
                  • Performans və son istifadəçi təcrübəsi əsas probleminizdir.

                  HTTP API-ləri izləyir İstirahət ümumi API-lər üçün daha çox istifadə olunmağa meyllidir.

                  • RPC müştəriləri xidmətin tətbiqi ilə sıx birləşir.
                  • Hər yeni əməliyyat və ya istifadə üçün yeni bir API təyin edilməlidir.
                  • RPC-nin debugunu düzəltmək çətin ola bilər.
                  • Mövcud texnologiyalardan istifadə edə bilməyəcəksiniz. Məsələn, RPC zənglərinin Squid kimi önbelleğe alma serverlərində düzgün bir şəkildə önbelleğe alınmasını təmin etmək üçün əlavə səy tələb oluna bilər.

                  Nümayəndəlik dövlət köçürməsi (REST)

                  REST, müştərinin server tərəfindən idarə olunan bir sıra mənbələrdə hərəkət etdiyi bir müştəri / server modelini tətbiq edən bir memarlıq üslubudur. Server, manipulyasiya edə bilən və ya mənbələrin yeni bir təqdimatını əldə edə biləcək mənbələrin və hərəkətlərin təqdimatını təmin edir. Bütün rabitə vətəndaşlığı olmayan və önbelleğe alınmış olmalıdır.

                  RESTful interfeysin dörd keyfiyyəti var:

                  • Resursları müəyyənləşdirin (HTTP-də URI) - hər hansı bir əməliyyatdan asılı olmayaraq eyni URI istifadə edin.
                  • Təmsillərlə dəyişdirin (HTTP-dəki fellər) - fellərdən, başlıqlardan və bədəndən istifadə edin.
                  • Özünü təsvir edən səhv mesajı (HTTP-də status cavabı) - Vəziyyət kodlarını istifadə edin, təkəri yenidən icad etməyin.
                  • HATEOAS (HTTP üçün HTML interfeysi) - veb xidmətiniz brauzerdə tam olaraq əlçatan olmalıdır.

                  REST, məlumatları ifşa etməyə yönəlmişdir. Müştəri / server arasındakı əlaqəni minimuma endirir və ümumi HTTP API-ləri üçün istifadə olunur. REST, URI'lər, başlıqlar vasitəsilə təmsil etmə və GET, POST, PUT, DELETE və PATCH kimi fellər vasitəsilə hərəkətləri ifşa etmək üçün daha ümumi və vahid bir metoddan istifadə edir. Vətəndaşı olmayan REST, üfüqi miqyaslandırma və bölmə üçün əladır.

                  • REST məlumatları ifşa etməyə yönəldildikdə, qaynaqlar təbii bir şəkildə təşkil edilmədikdə və ya sadə bir hiyerarşidə əldə edilmədikdə yaxşı uyğun olmaya bilər. Məsələn, son bir saatdakı bütün yenilənmiş qeydlərin müəyyən bir hadisələr toplusuna uyğun olaraq qaytarılması yol kimi asanlıqla ifadə olunmur. REST ilə, URI yolu, sorğu parametrləri və bəlkə də sorğu gövdəsinin birləşməsi ilə tətbiq olunma ehtimalı yüksəkdir.
                  • REST adətən bəzən istifadə halınıza uyğun olmayan bir neçə felə (GET, POST, PUT, DELETE və PATCH) əsaslanır. Məsələn, vaxtı keçmiş sənədlərin arxiv qovluğuna köçürülməsi bu fellərin içərisinə tam uyğun gələ bilməz.
                  • Mürəkkəb mənbələri iç içə hiyerarşilərlə əldə etmək, vahid baxışlar göstərmək üçün müştəri və server arasında çoxsaylı gediş-gəliş tələb edir. bir blog girişinin məzmunu və bu girişdəki şərhlərin alınması. Dəyişən şəbəkə şəraitində işləyən mobil tətbiqetmələr üçün bu birdən çox gediş-gəliş çox arzuolunmazdır.
                  • Vaxt keçdikcə, bir API cavabına daha çox sahə əlavə edilə bilər və köhnə müştərilər bütün yeni məlumat sahələrini alacaqlar, hətta ehtiyac duymayacaqları da, nəticədə faydalı yük ölçüsünü şişirdir və daha böyük gecikmələrə gətirib çıxarır.

                  RPC və REST zənglərinin müqayisəsi

                  Əməliyyat RPC İstirahət
                  Qeydiyyatdan keçmək POST /qeydiyyatdan keçmək POST / şəxslər
                  İstefa POST / istefa
                  <
                  "personid": "1234"
                  >
                  SİL / nəfər / 1234
                  Bir insanı oxuyun GET / readPerson? personid = 1234 GET / nəfər / 1234
                  Bir şəxsin əşyalar siyahısını oxuyun GET / readUsersItemsList? personid = 1234 GET / şəxslər / 1234 / məhsul
                  Bir şəxsin əşyalarına bir maddə əlavə edin POST / addItemToUsersItemsList
                  <
                  "personid": "1234"
                  "itemid": "456"
                  >
                  POST / şəxslər / 1234 / məhsul
                  <
                  "itemid": "456"
                  >
                  Bir elementi yeniləyin POST / modifyItem
                  <
                  "itemid": "456"
                  "açar": "dəyər"
                  >
                  QOY / maddələr / 456
                  <
                  "açar": "dəyər"
                  >
                  Bir elementi silin POST / removeItem
                  <
                  "itemid": "456"
                  >
                  SİL / maddələr / 456

                  Mənbə (lər) və əlavə oxu: REST və RPC

                  Bu bölmə bəzi yeniləmələrdən istifadə edə bilər. Töhfə verməyi düşünün!

                  Təhlükəsizlik geniş bir mövzudur. Əhəmiyyətli bir təcrübəniz, təhlükəsizlik təcrübəniz olmadıqca və ya təhlükəsizlik bilikləri tələb edən bir vəzifə üçün müraciət etmədiyiniz müddətdə, yəqin ki, əsaslardan daha çox şeyə ehtiyacınız olmayacaq:

                  • Tranzitdə və istirahətdə şifrələyin.
                  • XSS və SQL enjeksiyonunun qarşısını almaq üçün istifadəçi məruz qaldığı bütün istifadəçi girişlərini və ya hər hansı bir giriş parametrlərini sanitarlaşdırın.
                  • SQL enjeksiyonunun qarşısını almaq üçün parametrləşdirilmiş sorğulardan istifadə edin.
                  • Ən az imtiyaz prinsipindən istifadə edin.

                  Mənbə (lər) və əlavə oxumaq

                  Bəzən sizdən 'zərfin arxasında' təxminlərini etməyiniz istənir. Məsələn, diskdən 100 şəkil miniatürü yaratmağın nə qədər vaxt aparacağını və ya bir məlumat quruluşunun nə qədər yaddaş alacağını təyin etməyiniz lazım ola bilər. The İki masanın səlahiyyətləriHər bir proqramçı bilməli olan gecikmə nömrələrini lazımlı istinadlardır.

                  Mənbə (lər) və əlavə oxumaq

                  Hər bir proqramçı bilməli olan gecikmə nömrələrini

                  Yuxarıdakı rəqəmlərə əsaslanan lazımlı göstəricilər:

                  • HDD-dən 30 MB / s-də ardıcıl oxuyun
                  • 100 Gb / s-də 1 Gbps Ethernet-dən ardıcıl oxuyun
                  • SSD-dən 1 GB / s-də ardıcıl oxuyun
                  • Əsas yaddaşdan ardıcıl olaraq 4 GB / s oxuyun
                  • Saniyədə 6-7 dünya miqyasında gəzinti
                  • Bir məlumat mərkəzi daxilində saniyədə 2000 dönüş

                  Gecikmə nömrələri görselleştirildi

                  Mənbə (lər) və əlavə oxumaq

                  Əlavə sistem dizaynına dair müsahibə sualları

                  Hər birini necə həll edəcəyimizə dair mənbələrə istinadlar olan ümumi sistem dizaynı müsahibəsi sualları.

                  Sual İstinad (lar)
                  Dropbox kimi bir fayl sinxronizasiya xidməti dizayn edin youtube.com
                  Google kimi bir axtarış motoru dizayn edin queue.acm.org
                  stackexchange.com
                  ardendertat.com
                  stanford.edu
                  Google kimi ölçeklenebilir bir veb tarayıcı dizayn edin quora.com
                  Google sənədlərini dizayn edin code.google.com
                  neil.fraser.name
                  Redis kimi əsas dəyərli bir mağaza dizayn edin slideshare.net
                  Memcached kimi bir önbellek sistemi dizayn edin slideshare.net
                  Amazon kimi bir tövsiyə sistemi dizayn edin hulu.com
                  iccai13.org
                  Bitly kimi bir tinyurl sistemi dizayn edin n00tc0d3r.blogspot.com
                  WhatsApp kimi bir söhbət proqramı dizayn edin highscalability.com
                  Instagram kimi bir şəkil paylaşma sistemi dizayn edin highscalability.com
                  highscalability.com
                  Facebook xəbər lent funksiyasını dizayn edin quora.com
                  quora.com
                  slideshare.net
                  Facebook qrafiki funksiyasını dizayn edin facebook.com
                  highscalability.com
                  Facebook chat funksiyasını dizayn edin erlang-factory.com
                  facebook.com
                  Facebook kimi bir qrafik axtarış funksiyası dizayn edin facebook.com
                  facebook.com
                  facebook.com
                  CloudFlare kimi bir məzmun çatdırılması şəbəkəsi dizayn edin figshare.com
                  Twitter kimi trend olan mövzu sistemi dizayn edin michael-noll.com
                  snikolov .wordpress.com
                  Təsadüfi kimlik yaratmaq sistemi dizayn edin blog.twitter.com
                  github.com
                  Bir zaman aralığında ən yaxşı k istəklərini qaytarın cs.ucsb.edu
                  wpi.edu
                  Birdən çox məlumat mərkəzindən məlumat verən bir sistem hazırlayın highscalability.com
                  Onlayn multiplayer kart oyunu dizayn edin indieflashblog.com
                  buildnewgames.com
                  Zibil toplama sistemi dizayn edin stuffwithstuff.com
                  washington.edu
                  API dərəcəsi məhdudlaşdırıcısı dizayn edin https://stripe.com/blog/
                  Bir fond birjası dizayn edin (NASDAQ və ya Binance kimi) Jane Street
                  Golang Tətbiqi
                  Tətbiq olun
                  Sistem dizaynı sualını əlavə edin Töhfə verin

                  Həqiqi dünya sistemlərinin necə dizayn olunduğuna dair məqalələr.

                  Bunun əvəzinə aşağıdakı məqalələr üçün qıcqırdılmış detallara diqqət yetirməyin:

                  • Bu məqalələr daxilində paylaşılan prinsipləri, ümumi texnologiyaları və nümunələri müəyyənləşdirin
                  • Hər bir komponent tərəfindən hansı problemlərin həll olunduğunu, harada işlədiyini, harada işləmədiyini öyrənin
                  • Öyrənilən dərsləri nəzərdən keçirin
                  Şirkət İstinad (lar)
                  Amazon Amazon memarlığı
                  Cinchcast Hər gün 1500 saat səs istehsal edir
                  DataSift Gerçək zamanlı məlumatlandırma Saniyədə 120.000 tweet
                  Dropbox Dropbox-u necə ölçdük
                  ESPN Saniyədə 100.000 nuh nuh işləyir
                  Google Google memarlığı
                  Instagram 14 milyon istifadəçi, terabayt fotoşəkil
                  Instagram'ı nə gücləndirir
                  Justin.tv Justin.Tv-nin canlı video yayım arxitekturası
                  Facebook Facebook-da yaddaş ölçüsü
                  TAO: Facebook-un sosial qrafik üçün paylanmış məlumat mağazası
                  Facebook-un foto anbarı
                  800,000 Sinxron İzləyiciyə Facebook Canlı Axını
                  Flickr Flickr memarlığı
                  Poçt qutusu 6 həftədə 0-dan bir milyona qədər istifadəçi
                  Netflix Bütün Netflix Yığının 360 dərəcə Görünüşü
                  Netflix: Play düyməsini basanda nə baş verir?
                  Pinterest Ayda 0-dan 10 milyarda səhifə baxışları
                  18 milyon ziyarətçi, 10 qat böyümə, 12 işçi
                  Oyun balığı 50 milyon aylıq istifadəçi və böyüyür
                  PlentyOfFish PlentyOfFish arxitekturası
                  Salesforce Gündə 1,3 milyard əməliyyatı necə idarə edirlər
                  Yığın daşması Yığın daşması arxitekturası
                  TripAdvisor 40 milyon ziyarətçi, 200 milyon dinamik səhifə baxışı, 30 TB məlumat
                  Tumblr Ayda 15 milyard səhifə baxış
                  Twitter Twitter-i yüzdə 10000 daha sürətli etmək
                  MySQL-dən istifadə edərək gündə 250 milyon tvit saxlamaq
                  150M aktiv istifadəçi, 300K QPS, 22 MB / S od atəşi
                  Miqyaslı vaxt qrafiki
                  Twitter-də böyük və kiçik məlumatlar
                  Twitter-dəki əməliyyatlar: 100 milyon istifadəçini əhatə edir
                  Twitter Saniyədə 3.000 Şəkillərə necə baxır
                  Uber Uber onların real vaxt bazar platformasını necə tərəziyə verir
                  Uber-in Ölçülməsindən 2000 Mühəndisə, 1000 Xidmətə və 8000 Git Anbarına qədər öyrənilən dərslər
                  WhatsApp WhatsApp arxitekturası Facebook 19 milyard dollara satın aldı
                  YouTube YouTube-un miqyası
                  YouTube memarlığı

                  Şirkət mühəndis blogları

                  Müsahibə aldığınız şirkətlər üçün memarlıq.

                  Qarşılaşdığınız suallar eyni domendən ola bilər.

                  Mənbə (lər) və əlavə oxumaq

                  Bir blog əlavə etmək istəyirsiniz? İşin təkrarlanmaması üçün şirkət blogunuzu aşağıdakı repoya əlavə etməyi düşünün:

                  Bölmə əlavə etmək və ya davam edən bir hissəni tamamlamağa kömək etmək istəyirsiniz? Töhfə verin!

                  Kreditlər və mənbələr bu repo boyunca təqdim olunur.

                  Hər hansı bir məsələni, sualı və ya şərhləri müzakirə etmək üçün mənimlə əlaqə qurmaqdan çəkinməyin.

                  Əlaqə məlumatlarımı GitHub səhifəmdə tapa bilərsiniz.

                  Açıq mənbə lisenziyası altında sizə bu depoda kod və mənbələr təqdim edirəm. Bu mənim şəxsi anbarım olduğundan, kod və mənbələrimə aldığınız lisenziya işəgötürənimdən deyil, məndəndir (Facebook).

                  Bu hərəkəti hazırda edə bilməzsiniz.

                  Başqa bir nişan və ya pəncərə ilə daxil olmusunuz. Sessiyanızı yeniləmək üçün yenidən yükləyin. Başqa bir nişanda və ya pəncərədə çıxdınız. Sessiyanızı yeniləmək üçün yenidən yükləyin.


                  Videoya baxın: حفظ اي ملف في قاعدة البيانات و استخراجة مرة أخرى لعرضه (Oktyabr 2021).