yo creo que hay algunos términos mezcladas aquí.
Todos sus datos van a una base de datos (también conocido como esquema). En una base de datos puede tener tablas.
p. Ej.
table employee
id integer
name varchar
address varchar
country varchar
table office
id integer
employee_id integer
address varchar
mesas dentro que tienen campos (id, name, address)
aka columnas. Y las tablas tienen una o más filas.
Un ejemplo para los empleados tabla:
id name address country
----------------------------------------------------
1 John 1 Regent Street UK
2 James 24 Jump Street China
3 Darth Vader 1 Death Star Bestine, Tatooine
Esto en cuanto a los conceptos básicos.
Por qué partición
Ahora supongamos que tenemos montones y montones de personas (filas) en nuestra base de datos.
Recuerde esto una base de datos galáctica, entonces tenemos 100 mil millones de registros.
Si queremos buscar a través de este rápido, es bueno si podemos hacer esto en paralelo.
Así que partimos la tabla (por país) y luego podemos tener x servidores buscando en 1 país cada uno.
El particionamiento en los servidores se llama sharding
.
O podemos hacer una partición, p. datos históricos por año, por lo que no tenemos que pasar por todos los datos solo para obtener la noticias recientes. Solo tenemos que pasar por la partición de este año. Esto se llama partitioning
.
¿Cuál es la gran diferencia entre sharding
puede solo partitioning
?
Sharding
En sharding
tiene previsto que todas sus datos son relevantes, y la misma probabilidad de ser consultado. (por ejemplo, google puede esperar que se consulten todos sus datos, archivar parte de sus datos es inútil para ellos).
En este caso, quiere que muchas máquinas miren sus datos en paralelo, donde cada máquina hace parte del trabajo.
Así le da a cada máquina una partición (fragmento) diferente de los datos y le da a todas las máquinas la misma consulta. Cuando salgan los resultados, UNION
los junta y genera el resultado.
en dividir
En básica partitioning
parte de sus datos es hot
y es parte not
. Un caso típico son los datos históricos, los datos nuevos son hot
, los datos antiguos apenas se tocan.
Para este caso de uso, no tiene sentido colocar los datos antiguos en servidores separados. Esas máquinas simplemente esperarán y esperarán y no harán nada porque a nadie le importan los datos antiguos, excepto algunos auditores que lo miran una vez al año.
Así que divide los datos por año y el servidor archivará automáticamente las particiones antiguas para que sus consultas solo tengan uno (quizás 2) años de datos y sean mucho más rápidos.
¿Necesito particionar?
Solo haces particiones cuando tienes montones y montones de datos, porque complican tu configuración.
A menos que tenga más de un millón de registros, no tiene que considerar la creación de particiones. *)
Si tiene más de 100 millones de registros, debe considerarlo. *)
Para más información ver: http://dev.mysql.com/doc/refman/5.1/en/partitioning.html
y: http://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html
Véase también wiki: http://en.wikipedia.org/wiki/Partition_%28database%29
*) Estos son sólo mis heurística personales Tu caso es distinto.
¿Dónde ves esto? No creo que lo que estás diciendo (subdividir tablas basadas en el recuento de filas) es una práctica común en absoluto. –
No está fuera de tema, sería mejor como un CW, pero el porqué de las particiones definitivamente está relacionado con la programación. Mucha gente pregunta '¿cómo participo' (sobre el tema) y la respuesta es infaliblemente' no lo hagas porque no lo necesitas' indicando que las personas se han olvidado de preguntar (ellos mismos/otros) '(por qué) ¿Debería particionar? 'Por esta razón, es bueno tener una pregunta de discusión sobre este tema en la que SO pueda ver los pros y los contras de la partición. – Johan
Sí, exactamente: las tablas de particionamiento manual son una locura porque también tendrá que volver a unirlas manualmente con una 'unión' o una 'unión' si desea consultar ambos conjuntos de datos. Si usa una función de partición, MySQL hace todo el trabajo por usted. Esto significa que la partición es transparente para su aplicación y su código no se rompe. ganar-ganar. – Johan