2010-09-28 9 views
5

Hice una aplicación de comercio electrónico que se ejecuta en C#. Cada instancia de esta aplicación ahora tiene su propio:¿Cómo convertir una aplicación web con DBs individuales a una nube con una sola base de datos?

  1. IIS 7 grupo de aplicación
  2. IIS 7 página web
  3. SQL Server 2008 de base de datos

Mi pareja me dijo que tenemos que volcar este acercarse y pasar a una nube. Parece que SQL Azure cobra por base de datos. Por lo tanto, será muy costoso para nosotros seguir este enfoque. ¿Hay alguna manera de usar una única base de datos gigante sin tener que volver a escribir toda la capa de acceso a datos? * ¿O existe una forma económica de tener cientos de pequeñas bases de datos de SQL Azure? *

nota: cada base de datos es sólo unos 20 MB

+0

¿* Necesitas * volcar este enfoque y pasar a una nube? ¿Por qué? – FrustratedWithFormsDesigner

+0

amigo, ¿has visto ning.com ???- Dentro de 2 años esto es lo que todos esperarán. Cree un _________ completo (complete el espacio en blanco con lo que haga) ... en 30 segundos. – aron

+0

amigo, eso no * explica claramente * su * necesidad * de un sistema basado en la nube. – FrustratedWithFormsDesigner

Respuesta

2

Sí, SQL Azure le cobra por base de datos, pero lo que realmente está pagando es el tamaño de la base de datos. Por ejemplo, un DB de 1GB le costará $ 9.99 y un mes, un DB de 10GB le costará $ 99.99 al mes. Las bases de datos en SQL Azure también tienen actualmente un tamaño máximo de 50 GB.

En base a esto y lo que ha dicho sobre su aplicación (posiblemente cientos de DB), y suponiendo que cada base de datos contendrá suficientes datos para que valga la pena pagar 1GB de DB, seguiría usando una base de datos para cada instancia.

Si los datos de cada instancia son realmente pequeños e incluso si tuviera cientos de instancias no alcanzaría el límite de 50GB, ahorraría dinero (pero no tiempo) dividiendo sus datos y almacenándolos en solo una base de datos.

Si el costo es su principal preocupación y está pensando en una reescritura de todos modos, consideraría usar Azure Table Storage (AZT) donde ese mismo 1GB de datos le costará $ 0.15 por mes para almacenar (pero tiene que renunciar a cosas pequeñas como claves externas y consultas con más de 1 tabla en ellas)

+0

Desde una perspectiva de costo [Azure Table Storage (AZT)] sería lo mejor. Sin embargo, podría volver a escribir una aplicación importante. – aron

+0

También hay esta muestra de MS, que trata sobre un sistema multiusuario. http://www.fabrikamshipping.com/ – knightpfhor

1

Con 20 MB por base de datos, cubriría aproximadamente 50 de dichas bases de datos en una única base de datos Azure de 1 GB.

Con los nuevos tamaños de base de datos, su siguiente tamaño es de 5GB, y su facturación se amortiza diariamente, en función del almacenamiento máximo utilizado para un día determinado. Por lo tanto, para los momentos en que tenga menos de 1 GB, se le facturará la tarifa de 1 GB ($ 9.99 por mes/días en el mes). Una vez que exceda 1 GB, pasará al nivel de 5 GB ($ 49.95/día en mes). Esto sería considerablemente menos costoso que tener 50 bases de datos de 1 GB, que se ejecutarían aprox. $ 500 mensuales.

Para combinar sus bases de datos, necesitaría algún tipo de identificación de cliente o ID de instancia que tendría que agregar a sus tablas, para proporcionar su división entre inquilinos.

Vi otra sugerencia de knightpfhor sobre el traslado a Table Storage para ahorrar costes. Si bien el Almacenamiento de tablas es menos costoso que el almacenamiento de SQL Azure, probablemente sea un cambio importante en la aplicación, ya que el Almacenamiento de tablas no es relacional y no tiene procedimientos almacenados ni ningún otro soporte que normalmente recibiría de SQL Server. Agregar una clave de partición/cliente es mucho menos invasivo que una reescritura de capa de almacenamiento mayorista.

+0

El término que falta en esta (excelente) respuesta es multi-tenancy; eso hace que sea más fácil para el OP a bingoogle obtener información de antecedentes. Una base de datos de múltiples inquilinos tendría sentido en este escenario, pero en general, una aplicación de múltiples inquilinos tiene aún más sentido en términos de escenarios de nube. – tijmenvdk

+0

Mi aplicación permite a los usuarios subir el código C#. Entonces, es importante que cada sitio tenga su propio db aislado. De esta forma, si carga un código SQL malicioso, solo afecta a su propio db. ¿Me permitiría un solo db celeste hacer esto? ¿Podría hacer una base de datos secundaria? o esquemas donde la cadena de conexión del sitio del usuario final tiene acceso limitado? – aron

+0

¿Alguno de los códigos que cargan los usuarios se ejecuta en su base de datos? ¿Los usuarios pueden hacer cambios en la base de datos? – knightpfhor

Cuestiones relacionadas