Хората влагат много труд в сайтовете си и изведнъж те започват да работят зле, като привидно нищо кой-знае какво не се е променило. Някаква INNODB таблица с текстове е достигнала скромен обем от 4 GB или данните ни са достигнали десетина милиона записа.
Скалируемост – възможност да се работи с нарастнал трафик или нарастнал обем, чрез добавяне на хардуер. RDBMS се забавят с нарастването на обема. JOIN, GROUP BY , ALTER стават бавни и постепенно невъзможни. Partitioning в RDBMS се прави по PK. Ако употребата на данните не е по PK, забавяне. Sharding е разделяне на данните от 1 таблица по критерий с код, написан от програмистите.
NoSQL решенията включват най-разнообразни идеи. Отказът от SQL е общ, отказът от фиксирана схема – почти. JS, JSON и REST са разпространени. Евентуалната консистентност е почти обща. MapReduce е особено популярен. Има разработена теорема на Ерик Брюър – от наличност, консистентност и толерантност към разделяне на части, БД може да осигури само 2. За това обичайно се жертва консистентността, като най-малкото зло.
Около 15 разгледани в известни детайли, от общо няколко десетки. BigTable клонинги, Динамо клонинги, Документни БД, k/v персистентни cache и др.
SSTable означава sorted string table – файл с подредени двойки ключ-стойност. GFS е отговорна за синхронизацията на данните по сървърите.
Peer архитектура – синхронизацията става между равнопоставени сървъри.
Суперколоната е допълнително ниво на йерархия от колони. Ако имаме колона с домашен адрес и колона с модел автомобил, суперколоната човек с идентификатор името му, обединява автомобила и адреса. Има шел, свой протокол за разпространение на измененията. Тази БД почти погреба digg , но пък изстреля в небесата reddit.
Документът в каучдб е json обект с произволна структура, подреден по ключ. Идентификаторите могат да са както от потребителя, така и автоматично генерирани. За да бъдат дотъпни данните от вътрешността на документа се използват изгледи, чрез design documents. Изгледите са материални и много бързи. Използват дистрибутиран между сървърите mapreduce за генерирането си. За решаване на конфликти се използва MVCC, базиран на ревизии, които съществуват едновременно.
Документна база, с конзолен шел, индекси за достъп в реално време. Много бързо писане, много компромиси по отношение консистентност. Fail при 4 sq, голям успех на други места.
Не изисква RAID, защото върши същото. Дублира данните по дисковете сървърите и ги чете паралелно, с цел оптимизация. MapReduce е отделно приложение спрямо базата данни – HBase или Cassandra. Притежава езици за изграждане на mapreduce заявки – Pig Latin и Hive QL. Ползва се от Yahoo, Twitter. Hbase работи с таблици.
За пълен тест е необходимо на 1 DB сървър да се осигури неколкократно превишаващ тестов ресурс. В моя случай машината с тестовете беше 3 годишен лаптоп, а тази с базите данни – 7-8 годишен десктоп.