Nunca he trabajado con el particionamiento de SQL Server, pero actualmente me enfrento al diseño de una base de datos para la cual los volúmenes probablemente lo justifiquen. El sistema es para cupones. Los cupones se emitirán periódicamente, generalmente cada seis semanas, aunque también se emitirán ad-hoc, por ejemplo, para un evento especial. Hay 15 millones de clientes y por cada evento de emisión, cada cliente recibirá 6 tipos de cupones diferentes, lo que da un total de 90 millones de instancias de cupones. Necesitamos rastrear los datos de canje de instancias de cupones y mantenerlos durante 6 meses, aunque generalmente un cupón solo es válido por seis semanas. Cualquier solicitud de canje de un cupón no válido no llegará a la base de datos porque será validada por el TPV hasta.
Durante un período de seis meses, tendremos que almacenar hasta 360 millones de filas en la tabla de Instancias de cupones y hasta 72 millones (suponiendo una tasa de canje máxima del 20%) en la tabla de Canje. Tengo la sensación de que estos números son demasiado grandes para una sola partición?
Mi pregunta es: ¿qué usar como clave de partición? Un candidato obvio sería por evento de emisión, dando aproximadamente 6 particiones. ¿Pero entonces creo que tal vez incluso eso daría un tamaño de partición que es demasiado grande para permitir un rendimiento óptimo? ¿Sería posible particionar por dos claves, por ejemplo, por evento de emisión + último dígito del ID del cliente? Entonces la lógica sería:
If issuance event = 1 and last digit of customer id < 5 then
Store in partition 1
Else if issuance event = 1 and last digit of customer id >4 then
Store in partition 2
Else if issuance event =2 and last digit of customer id <5 then
Store in partition 3
Else if issuance event =2 and last digit of customer id >4 then
Store in partition 4
Etc...
Además, no estoy seguro de la especificación del servidor de base de datos que necesitaremos. ¿Serán suficientes 16gb y 8CPU? El db necesita poder devolver un resultado de la tabla de instancias de cupones, tecleado en un valor de código de barras numérico en menos de medio segundo. Se espera que la solicitud de transacción esperada para validar (seleccionar) y canjear (insertar) alcance un máximo de aproximadamente 3.500 por minuto.
El servidor SQL Server 2008r2 64bit db se aprovisionará como VM desde un host muy potente con acceso a un SAN de alto rendimiento y gran capacidad.
Estaría muy agradecido por cualquier consejo de aquellos que han implementado una solución de SQL Server para administrar volúmenes similares.
Saludos
Robar.