2012-08-29 44 views
7

Tengo una aplicación que me gustaría crear. Pero no estoy seguro de cómo hacerlo. Estoy usando node.js y me gustaría usar couchdb, pero si algo como mongodb o riak sería una mejor opción, estoy dispuesto a escuchar ideas. Sin embargo, tengo un sitio, digoAplicaciones sin conexión con Node.JS y CouchDB

cool.com

y en que hay una instancia couchdb, así como un sitio para administrar una tienda. decir un carrito de compras. el db alberga todos los elementos y datos de la tienda. La aplicación en sí tiene un administrador backend para administrar esos datos y puede cambiar los elementos. Lo que me gustaría poder hacer es tener la capacidad de que el usuario se desconecte de Internet y aún así tener el back-end de administración funcionando. Me doy cuenta de que para que esto funcione necesito usar un marco de trabajo del lado del cliente con mis modelos/rutas/controladores/lo que sea. Pero de lo que no estoy seguro es de cómo dejar que el sitio funcione sin conexión. couchdb si está instalado localmente puede sincronizar los datos de local a remoto cuando vuelva a estar en línea, y si el usuario administrador está en la computadora, podría hacer que instalen un sofá. pero eso podría ser complicado.

Además, ¿qué sucede si el usuario administrador está en una tableta o un teléfono? ¿Tendría que tener una aplicación móvil real y una aplicación de escritorio para hacer esto? ¿Hay alguna manera en que pueda configurar esto para que sea perfecto para el usuario final? También me gustaría que esto también esté fuera de línea para los usuarios finales, pero el público más grande es el administrador.

Otro caso de uso, sistema POS de la tienda. y se va la luz. Sin embargo, el sistema POS se puede cargar desde la web en una tableta y aún pueden realizar ventas basadas en tarjetas si el wifi está apagado, ya que la aplicación está disponible sin conexión.

No estoy seguro de cómo hacer esto. supongamos que necesito un trabajo de cliente que pueda manejar los datos y el back-end. algo como brasas o angulosas. también hay montones de meteoritos como el meteorito y el derby js, pero no están completamente fuera de línea, pero son para la apariencia de tiempo real. aunque el meteorito tiene mini mongo, por lo que vale la pena investigarlo.

Esperaba que alguien me pudiera ayudar a descubrir cómo conseguiría que esta configuración funcionara, preferiblemente con el sofá, pero otras nosql también funcionarían si pudiera tener una manera de sincronizar los datos.

+0

¿Qué quisiste decir con ventas basadas en tarjetas? ¿Te refieres al pago con tarjeta de crédito? –

+0

Sí. Entonces, un sistema de punto de venta en la tienda. Tomará múltiples métodos de pago. – skift

+0

¿Qué terminaste yendo? – bryanmac

Respuesta

3

Hay un proyecto interesante llamado AppJs (http://appjs.com/), que empaqueta Node.JS y Chrominium como un entorno de escritorio. Actualmente es muy reciente (muy poca documentación), pero parece ser bastante sencillo (utilizará las mismas herramientas que usaría para su aplicación en línea).

En cuanto a la sincronización de los entornos fuera de línea y en línea. Dudo que pueda confiar en CouchDB de la manera que usted imagina. El soporte móvil de CouchDB no es tan completo como sugiere la documentación. Entonces, en este sentido, no sería diferente al uso de SQL/Mongo/Punchcards.

Puede tener más suerte diseñando un esquema de serialización adecuado basado en XML o JSON (o simplemente texto sin formato) y pasando archivos entre las instalaciones en línea y fuera de línea.

Editar - Desde que se escribió esto, Node Webkit - http://nwjs.io/ - es claramente el reemplazo más obvio para App.js. Tiene una API muy simple y algunas funciones excelentes.

+0

hrmm, app.js parece que podría encajar muy bien. ¿sabes si también tiene la capacidad de agrupar el servidor? Si pudiera conseguir que empaquetara la instancia del sofá, sería perfecto. – skift

+0

solo para tener en cuenta, voy a utilizar app.js para una instancia de escritorio de mi aplicación. y algo así como phonegap para dispositivos móviles. Aunque sé que tengo otros problemas para apostar por una base de datos local. Pero por el momento, dado que solo se instalará en algunas computadoras, simplemente puedo crear una secuencia de comandos para instalar la base de datos manualmente, y luego encontrar una solución para empaquetarla correctamente. – skift

4

Si desea que los clientes que funcionan parecen desconectados y se conecten (como un TPV con el poder) entonces Recomendaría hacer que la aplicación funcione principalmente fuera del almacenamiento local con una publicación en segundo plano o sincronización a la nube.

opciones de almacenamiento local podría ser desde algo ligero como SQLite, sqlexpress, pájaro de fuego a ninguna opción de SQL como mongo, couchdb etc ...

Pero para el cliente o dispositivo, tenga en cuenta la facilidad de configuración y peso de la opción. También debe considerar el tipo de clientes: ¿tiene muchas plataformas que varían desde dispositivos a PC? No quieres algo que tenga una configuración pesada y una huella de tiempo de ejecución. Eso está bien en el lado del servicio.

Por el lado del servicio, tenga en cuenta la naturaleza de sus datos y si se ajusta mejor a los sistemas transaccionales/relacionales (banca, etc.) o finalmente a los documentos consistentes/no transaccionales (sin sql). No te olvides del híbrido como una opción. Considere también la plataforma de servicio; por ejemplo, el nodo va bien con mongodb (objetos json de adelante hacia atrás) ...

Las opciones de almacenamiento del dispositivo y del servicio pueden ser diferentes (y probablemente deberían) separadas por las interfaces de servicio (jabón, resto/http, enchufes, etc.).

Es difícil tener una solución única para todos, pero a menudo algo ligero como sqlite en el dispositivo o cliente facilita la instalación/configuración y escalabilidad en el lado del servicio con algo como sqlserver/mysql o couchdb/mongodb sentido.

Algunos enlaces para leer:

Usted es cuestión abierta es bastante amplia y no hay una talla única solución. Con suerte, proporcioné algunas opciones para pensar.

+0

También había considerado el local primero. esencialmente haciendo 2 aplicaciones. el sitio y el servidor. ambos podrían usar api muy similares que lo harían más fácil. En realidad, parte del sistema será una interfaz POS que * debería * estar disponible en una tableta. pensé que podría forzarlos a usar la versión en línea. el escritorio necesita poder estar fuera de línea (de nuevo, POS). Alhtough si pudiera desconectarme para el móvil también sería genial (phonegap?). Si necesito construir un par de aplicaciones separadas, lo haré, solo necesito que sea lo más uniforme posible en general. – skift

+0

Puede consolidar el dispositivo/PC en sqlite (es multiplataforma - compartir código sql) y el lado del servicio en cualquier opción de almacenamiento que tenga sentido allí (mongo/couchdb). Encontré mongo para encajar con nodo pero no he jugado con couchdb tanto. – bryanmac

+0

estaba pensando, solo ofrezco la aplicación fuera de línea a los administradores, y todavía necesito credenciales para configurar la sincronización. luego en el sitio podría verificar localmente el DB y esperar a que se sincronice. cuando está hecho usa el local. si no hay una copia local, usa el db en línea. de esta manera es una aplicación, y solo proporciono algún tipo de paquete para el db local. pero esto aún deja dudas sobre cómo abordaría los dispositivos móviles. obligarlos a estar en línea? o crea una aplicación móvil. sofá aparentemente tiene un cliente móvil en las obras para sofá, que dicen que tienen funcionando, que también puede ser una respuesta. – skift

6

No estoy seguro si funcionaría para usted, pero he estado pensando en una aplicación así desde hace bastante tiempo y he estado investigando sobre lo que es posible. La mejor solución que podría encontrar es usar un servidor con un couchdb y escribir la aplicación basada en el cliente. Luego, para el almacenamiento de datos, use pouchdb y sincronice el pouchdb regularmente con su couchdb en el servidor si la aplicación está en línea. Sé que la bolsa está en una etapa inicial y no está lista para producción, pero si está dispuesto a trabajar, diría que es factible.

+0

pouchdb parece prometedor también. Realmente me gusta esto. si puede ser incluido con app.js que @charlie mencionó, eso sería un plus. – skift

+0

@luckysmack en realidad no necesita AppJs para PouchDB, se ejecuta en IndexedDB en el navegador (o Chromium Embedded o donde sea que lo ejecute), con soporte WebSQL y LocalStorage también planificado para compatibilidad con versiones anteriores. – dain

+0

¿hay alguna documentación para lograr esto? ¿y si al final no uso app.js y solo uso un navegador integrado por los usuarios? ¿o algo mas? – skift

Cuestiones relacionadas