Использование Ayende Rahien статический метод, который довольно прост...
public static class SystemTime
{
public static Func Now = () => DateTime.Now;
}
Идея разделения заключается не в использовании нескольких серверов, а в использовании нескольких таблиц вместо одной. Таблицу можно разделить на множество таблиц, чтобы в одной подтаблице были старые данные, а в другой - новые. Затем база данных может оптимизировать запросы, в которых вы запрашиваете новые данные, зная, что они находятся во второй таблице. Более того, вы определяете, как данные разделяются.
Простой пример из документации MySQL :
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY RANGE ( YEAR(separated) ) (
PARTITION p0 VALUES LESS THAN (1991),
PARTITION p1 VALUES LESS THAN (1996),
PARTITION p2 VALUES LESS THAN (2001),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
Это позволяет ускорить, например:
Удаление старых данных простым:
ALTER TABLE сотрудники DROP PARTITION p0;
База данных может ускорить запрос следующим образом:
SELECT COUNT (*)
ОТ сотрудников
ГДЕ разделяются МЕЖДУ "2000-01-01" И "2000-12-31"
ГРУППА ПО store_id;
Зная, что все данные хранятся только в разделе p2.