Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
user_id int(10) NOT NULL,
post_id int(10) NOT NULL,
post_date int(10) NOT NULL,
post_title varchar(100) NOT NULL,
post_body text NOT NULL,
PRIMARY KEY (user_id, post_id)
) ENGINE=InnoDB;
DROP TABLE IF EXISTS comments;
CREATE TABLE post_cmt
(
user_id int(10) NOT NULL,
post_id int(10) NOT NULL,
comment_id int(10) NOT NULL,
from_user_id int(10) NOT NULL,
comment_date int(10) NOT NULL,
comment_title varchar(250) NOT NULL,
comment_body text NOT NULL,
PRIMARY KEY (user_id, post_id, comment_id)
) ENGINE=InnoDB;
Для тестов с ENGINE=MyISAM отличий в структуре БД
нет. Все дампы схем доступны по адресу:
Методика тестирования
Распредение количества запросов на чтение и запись было выбрано в отношении 80% и 20% соответственно. После запуска на тестирование производилась выдержка в течение нескольких десятков секунд для стабилизации результатов. На каждую СУБД производилось пять тестов, результат усреднялся.
Тестировались следующие запросы (в процентах от общего числа):
n чтение френдленты (95%);
n чтение постов и комментариев (5%);
n запись постов и комментариев к ним (95%);
n создание новых пользователей и изменение свойств уже существующих (5%).
Эти четыре типа запросов дают практически полную эмуляцию работы блогосервиса.
Для PostgreSQL запросы выглядят так:
Чтение френдленты:
SELECT user_id, MAX(posts_id)
FROM posts
WHERE user_id
IN (SELECT friend_id
FROM friends
WHERE user_id = UserId)
GROUP BY user_id;
Чтение постов и комментариев:
SELECT *
FROM posts
WHERE (posts_id = PostId);
SELECT *
FROM comments
WHERE ((user_id = UserId) AND (posts_id = PostId))
ORDER BY comment_date;
Запись поста:
SELECT NewPost(UserId, Date, Title, Body);
Запись комментария:
SELECT NewComment(UserId, Date, Title, Body);
Создание пользователя:
SELECT NewUser(UserName)
Редактирование свойств пользователя:
SELECT ModifyUser(UserId, UserName);
Для MySQL:
Запрос чтение ленты. Общий вид запроса следующий: