Проект NewSQL призван решить проблемы, с которыми столкнулся Facebook, используя MySQL
В настоящее время, чтобы справиться с нагрузкой, которую создают 750 миллионов пользователей, Facebook оперирует четырьмя тысячами экземпляров MySQL (используется шардинг, т.е. разнесение данных по серверам, отталкиваясь от определенного признака, например, первой буквы логина) и девятью тысячами установок memcached. Facebook даже ведёт специальную страницу MySQL@Facebook, где отслеживаются работы по поддержанию работы баз данных компании.
Широко известная проблема MySQL состоит в том, что эта СУБД никогда не предназначалась для обработки огромных объёмов данных и большого количества транзакций. Стоунбрейкер добавляет, что MySQL, как и другие основанные на языке SQL БД, потребляет слишком много ресурсов на накладные дополнительные операции БД (например, для поддержки многопоточности и поддержания корректного выполнения запросов в рамках ACID). Данные требования и расходы не мешают работе при небольших объёмах данных, но быстро начинают препятствовать нормальному функционированию при их увеличении.
Для решения возникающих проблем большие компании приняли на вооружение парадигму NoSQL, однако NoSQL БД плохо подходят на роль хранения обычных структурированных данных, кроме того, логику ACID с NoSQL приходится встраивать в пользовательский код, тем самым усложняя работу. В дополнение, по мнению Стоунбрейкера, NoSQL обладает не сильно возросшей производительностью относительно традиционных SQL-ориентированных СУБД.
Стоунбрейкер при поддержке компаний Xeround, Clustrix, NimbusDB, GenieDB и его собственной компании VoltDB занимается разработкой open source проекта NewSQL, который, обеспечивая выполнение требований ACID, игнорирует большинство других функций, негативно влияющих на производительность. NewSQL пока находится на стадии проектирования, ещё даже не принят язык запросов - решается вопрос о выборе между синтаксисом похожим на Java и синтаксисом, напоминающим обычные SQL-запросы. По мнению создателей NewSQL традиционный SQL устарел, слишком усложнен и имеет немало проблем, к тому же объектно-ориентированные СУБД уже не будущее, а настоящее. Для упрощения миграции будут разработаны конвертеры SQL в NewSQL и NewSQL в SQL, при этом они смогут транслировать запросы на лету, обеспечивая возможность запуска старых приложений без изменения.
Традиционный SQL | NewSQL, вариант 'Jdb' | NewSQL, вариант 'S2' |
CREATE TABLE TEST( ID INT PRIMARY KEY, NAME VARCHAR(255) ) | test=new table( int id, string name, key(id) ) | create table test( id int, name string, primary key(id) ) |
INSERT INTO TEST VALUES(1,'Hello') | test.add(1,"Hello") | insert test (1,'Hello') |
SELECT * FROM TEST | test.get() | select test |
SELECT T1.ID,T2.NAME FROM TEST T1, TEST T2 WHERE T.ID=T2.ID | t1=test; t2=test; t1.join(t2[t1.id==t2.id]).get(t1.id,t2.name) | select t1:test join t2:test on t1.id==t2.id get t1.id, t2.name |
UPDATE TEST SET NAME='Hi' WHERE ID=1 | test[id==1].set(name="Hi") | update test set id=1 where name=='Hi' |
DELETE FROM TEST WHERE ID=1 | test[id==1].delete() | delete test where id==1 |
DROP TABLE TEST | test.drop() | drop test |
Источник: http://www.opennet.ru/opennews/art.shtml?num=31142
|
0 | Tweet | Нравится |
|