{"id":96465,"date":"2020-10-12T07:42:27","date_gmt":"2020-10-12T05:42:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne"},"modified":"2020-10-12T07:42:27","modified_gmt":"2020-10-12T05:42:27","slug":"eta-baza-dannyh-v-ogne","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne","title":{"rendered":"Esta base de datos est\u00e1 en llamas\u2026","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Esta base de datos est\u00e1 en llamas\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/e4e39a7039dad14422fd83c05f114d6f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nD\u00e9jame contarte una historia t\u00e9cnica.<\/p>\n<p>Hace muchos a\u00f1os, desarroll\u00e9 una aplicaci\u00f3n con funciones de colaboraci\u00f3n integradas. Era un c\u00f3modo stack experimental que aprovechaba todo el potencial de las primeras versiones de React y CouchDB. Sincronizaba datos en tiempo real a trav\u00e9s de JSON. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Operational_transformation\">OT<\/a><\/noindex>. Se utilizaba en el trabajo interno de la empresa, pero su amplia aplicabilidad y potencial en otros \u00e1mbitos eran evidentes.<\/p>\n<p>Al intentar vender esta tecnolog\u00eda a posibles clientes, nos encontramos con un obst\u00e1culo inesperado. En el video de demostraci\u00f3n, nuestra tecnolog\u00eda se ve\u00eda y funcionaba a la perfecci\u00f3n, sin ning\u00fan problema. El video mostraba c\u00f3mo funcionaba realmente, y no hab\u00eda nada simulado. Inventamos y codificamos un escenario realista de uso del programa.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"Esta base de datos est\u00e1 en llamas\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/ea517a6aee0b015dc4d7bad4e86af6f4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDe hecho, eso fue lo que se convirti\u00f3 en un problema. Nuestra demo funcionaba como simulaban hacerlo los dem\u00e1s con sus aplicaciones. En concreto, la informaci\u00f3n se transmit\u00eda instant\u00e1neamente de A a B, incluso si eran archivos multimedia grandes. Despu\u00e9s de iniciar sesi\u00f3n, cada usuario pod\u00eda ver nuevas entradas. Con la aplicaci\u00f3n, diferentes usuarios pod\u00edan colaborar estrechamente en los mismos proyectos, incluso si hab\u00eda una conexi\u00f3n a Internet intermitente en alg\u00fan lugar de un pueblo. Esto se da por sentado en cualquier video sobre el producto editado en After Effects.<\/p>\n<p>A pesar de que todos sab\u00edan para qu\u00e9 sirve el bot\u00f3n Refresh, nadie entend\u00eda que las aplicaciones web que nos piden crear a menudo tienen sus limitaciones. Y que si ya no son necesarias, la experiencia del usuario ser\u00e1 completamente diferente. Principalmente notaban que pod\u00edan \"chatear\", dejando notas a sus interlocutores, por lo que se preguntaban en qu\u00e9 se diferenciaba esto de Slack, por ejemplo. \u00a1Uf!<\/p>\n<h2>Dise\u00f1o de sincronizaciones cotidianas<\/h2>\n<p>\nSi ya tienes experiencia en desarrollo de software, deber\u00edas estar frustrado por tener que recordar que la mayor\u00eda de las personas no puede simplemente mirar una imagen de la interfaz y entender lo que har\u00e1 al interactuar con ella. Sin mencionar lo que sucede dentro del propio programa. Saber lo que <i>puede<\/i> suceder\u00e1 es en gran medida resultado del conocimiento de lo que no puede suceder y lo que no debe suceder. Para esto se requiere <noindex><a rel=\"nofollow\" href=\"https:\/\/uxdesign.cc\/design-of-everyday-things-chapter-01-summary-and-keypoints-664d426a11e0\">modelo mental<\/a><\/noindex> no solo de lo que hace el software, sino tambi\u00e9n de c\u00f3mo se coordinan y comunican entre s\u00ed sus distintas partes.<\/p>\n<p>Un ejemplo cl\u00e1sico de esto es un usuario que, durante veinte minutos, est\u00e1 mirando <i>spinner.gif<\/i>, pregunt\u00e1ndose cu\u00e1ndo se completar\u00e1 finalmente el trabajo. Un desarrollador entender\u00eda que el proceso probablemente se ha bloqueado, y que el gif nunca desaparecer\u00e1 de la pantalla. Esta animaci\u00f3n simula que el trabajo est\u00e1 en progreso, pero no est\u00e1 relacionada con su estado. En tales casos, a algunos t\u00e9cnicos les gusta poner los ojos en blanco, asombr\u00e1ndose de cu\u00e1n malinterpretado est\u00e1 el usuario. Sin embargo, preg\u00fantate, \u00bfqui\u00e9n de ellos se\u00f1ala el reloj giratorio y dice que en realidad est\u00e1 parado?<\/p>\n<p><img decoding=\"async\" alt=\"Esta base de datos est\u00e1 en llamas\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/db67c48846549b272a367c0a37aec97b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAh\u00ed radica el valor del tiempo real. Hoy en d\u00eda, las bases de datos en tiempo real siguen siendo utilizadas en gran medida de manera escasa, y muchos las ven con sospecha. La mayor\u00eda de estas bases de datos tienden a adoptar el estilo NoSQL, por lo que normalmente se utilizan soluciones basadas en Mongo, que es mejor olvidar. Sin embargo, para m\u00ed, eso significa la comodidad de trabajar con CouchDB, as\u00ed como estudiar el dise\u00f1o de estructuras que no solo ser\u00e1n capaces de ser llenadas de datos por alg\u00fan bur\u00f3crata. Creo que estoy utilizando mi tiempo de manera m\u00e1s \u00f3ptima.<\/p>\n<p>Pero el verdadero tema de esta publicaci\u00f3n es lo que estoy usando hoy. No por elecci\u00f3n propia, sino debido a la pol\u00edtica corporativa indiferente y ciega que se aplica. Por lo tanto, har\u00e9 una comparaci\u00f3n Totalmente Honesta e Imparcial de dos productos estrechamente relacionados para trabajar con bases de datos en tiempo real de Google.<\/p>\n<p><img decoding=\"async\" alt=\"Esta base de datos est\u00e1 en llamas\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/89432de9501b7667f8e187d14afc8897.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAmbos tienen la palabra Fire en sus nombres. Uno lo recuerdo con cari\u00f1o. El segundo para m\u00ed es otro tipo de fuego. No tengo prisa por decir sus nombres, porque en cuanto lo haga, nos confrontaremos con el primer gran problema: los nombres.<\/p>\n<p>El primero se llama <i>Firebase Real-Time Database<\/i>, y el segundo \u2014 <i>Firebase Cloud Firestore<\/i>. Ambos son productos de la <i>Firebase suite<\/i> de Google. Sus API se llaman, respectivamente, <code>firebase.database(\u2026)<\/code> y <code>firebase.firestore(\u2026)<\/code>.<\/p>\n<p>Esto sucedi\u00f3 porque <i>Real-Time Database<\/i> es simplemente la versi\u00f3n original <i>Firebase<\/i> antes de su compra por Google en 2014. Luego, en Google decidieron crear un producto paralelo, una <i>copia<\/i> de Firebase basada en los big data de la compa\u00f1\u00eda, y la llamaron Firestore with a cloud. Espero que no te hayas confundido a\u00fan. Si te has confundido, no te preocupes, yo mismo reescrib\u00ed esta parte del art\u00edculo diez veces.<\/p>\n<p>Porque es necesario especificar <i>Firebase<\/i> en cuesti\u00f3n de Firebase, y <i>Firestore<\/i> en el asunto de Firebase, al menos para hacerte entender hace unos a\u00f1os en Stack Overflow.<\/p>\n<p>Si hubiera un premio para el peor nombramiento de productos de software, este caso definitivamente ser\u00eda un fuerte candidato. La distancia de Hamming entre estos nombres es tan peque\u00f1a que confunde incluso a los ingenieros experimentados, cuyas manos escriben un nombre mientras su cabeza piensa en otro. Son planes que fracasaron estrepitosamente, ideados con las mejores intenciones; cumplieron la profec\u00eda de que la base de datos estar\u00eda ardiendo. Y no estoy bromeando. La persona que ide\u00f3 tal esquema de nomenclatura ha causado sangre, sudor y l\u00e1grimas.<\/p>\n<p><img decoding=\"async\" alt=\"Esta base de datos est\u00e1 en llamas\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/b793ce183c5d0477c32c87f64bce5879.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Victoria p\u00edrrica<\/h2>\n<p>\nSe podr\u00eda pensar que Firestore es una <i>sustituci\u00f3n<\/i> de Firebase, su descendiente de siguiente generaci\u00f3n, pero eso ser\u00eda un error. Firestore no est\u00e1 destinado a ser un reemplazo de Firebase. Parece que alguien le quit\u00f3 todo lo interesante y enred\u00f3 gran parte de lo que qued\u00f3 de varias maneras.<\/p>\n<p>Sin embargo, una mirada r\u00e1pida a los dos productos puede confundirte: parece que hacen lo mismo, a trav\u00e9s de API mayormente id\u00e9nticas y aun en la misma sesi\u00f3n de base de datos. Las diferencias son sutiles y se descubren solo al estudiar detenidamente la extensa documentaci\u00f3n comparativa. O cuando intentas portar c\u00f3digo que funciona perfectamente en Firebase para que funcione con Firestore. Ya entonces te das cuenta de que la interfaz de la base de datos se queda en blanco tan pronto como intentas arrastrar el mouse en tiempo real. Repito, no estoy bromeando.<\/p>\n<p>El cliente de Firebase es cort\u00e9s en el sentido de que almacena los cambios en b\u00fafer y realiza reintentos autom\u00e1ticos de actualizaci\u00f3n, priorizando la \u00faltima operaci\u00f3n de escritura. Sin embargo, Firestore tiene una limitaci\u00f3n de 1 operaci\u00f3n de escritura por documento por usuario por segundo, y esta limitaci\u00f3n la impone el servidor. Cuando trabajas con \u00e9l, t\u00fa mismo debes encontrar la manera de sortear esta restricci\u00f3n e implementar un limitador de frecuencia de actualizaciones, incluso cuando solo intentas crear tu aplicaci\u00f3n. Es decir, Firestore es una base de datos en tiempo real sin un cliente en tiempo real, que se disfraza como tal a trav\u00e9s de su API.<\/p>\n<p>Aqu\u00ed es donde comenzamos a ver los primeros signos del sentido de existencia de Firestore. Puede que me equivoque, pero sospecho que alguien en lo m\u00e1s alto de Google vio Firebase despu\u00e9s de la adquisici\u00f3n y simplemente dijo: 'No, Dios m\u00edo, no. Esto es inaceptable. No bajo mi mando.'<\/p>\n<p><img decoding=\"async\" alt=\"Esta base de datos est\u00e1 en llamas\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/fbb5ce5ff93b4e3a7bdcd12cce3bdd92.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSali\u00f3 de sus aposentos y proclam\u00f3:<\/p>\n<p><i>\u00bf'\u00bfUn gran documento JSON? No. Ustedes dividir\u00e1n los datos en documentos individuales, cada uno de los cuales tendr\u00e1 un tama\u00f1o de no m\u00e1s de 1 megabyte.'<\/i><\/p>\n<p>Parece que tal restricci\u00f3n no sobrevivir\u00e1 al primer choque con cualquier base de usuarios suficientemente motivada. Sabes que es cierto. En nuestro trabajo, por ejemplo, tenemos m\u00e1s de mil quinientas presentaciones, y eso es completamente normal.<\/p>\n<p>Con tal restricci\u00f3n, tendr\u00e1s que aceptar el hecho de que un 'documento' en la base de datos no se parecer\u00e1 a ning\u00fan objeto que el usuario podr\u00eda llamar documento.<\/p>\n<p><i>\u00bf'\u00bfArreglos de arreglos, que pueden contener otros elementos recursivamente? No. Los arreglos solo contendr\u00e1n objetos o n\u00fameros de longitud fija, como lo desea el Se\u00f1or.'<\/i><\/p>\n<p>As\u00ed que si esperabas incluir tu GeoJSON en Firestore, te dar\u00e1s cuenta de que eso es imposible. No se permite nada de dimensi\u00f3n m\u00faltiple. Espero que te guste Base64 y\/o JSON dentro de JSON.<\/p>\n<p><i>\u00bf'\u00bfImportaci\u00f3n y exportaci\u00f3n de JSON por HTTP, herramientas de l\u00ednea de comandos o panel de administraci\u00f3n? No. Solo podr\u00e1s exportar e importar datos a Google Cloud Storage. As\u00ed es como parece llamarse ahora. Y cuando digo 't\u00fa', me dirijo solo a aquellos que tienen las credenciales de Propietario del Proyecto. Todos los dem\u00e1s pueden ir y crear tickets.'<\/i><\/p>\n<p>Como puedes ver, el modelo de datos de Firebase es f\u00e1cil de describir. Contiene un enorme documento JSON que vincula las claves JSON con rutas URL. Si escribes usando <code>HTTP PUT<\/code> en <code>\/<\/code> FireBase lo siguiente:<\/p>\n<pre><code class=\"json\">{\n  \"hello\": \"mundo\"\n}<\/code><\/pre>\n<p>\nEntonces <code>GET \/hello<\/code> devolver\u00e1 <code>\"mundo\"<\/code>. En su mayor parte, funciona exactamente como esperas. Una colecci\u00f3n de objetos FireBase <code>\/my-collection\/:id<\/code> es equivalente a un diccionario JSON <code>{\"my-collection\": {...}}<\/code> en la ra\u00edz, cuyo contenido es accesible en <code>\/my-collection<\/code>:<\/p>\n<pre><code class=\"json\">{\n  \"id1\": {...object},\n  \"id2\": {...object},\n  \"id3\": {...object},\n  \/\/ ...\n}<\/code><\/pre>\n<p>\nEsto funciona excelente si cada inserci\u00f3n tiene un ID sin colisiones, para lo cual hay una soluci\u00f3n est\u00e1ndar en el sistema.<\/p>\n<p>En otras palabras, la base de datos es 100% compatible con JSON (*) y funciona perfectamente con HTTP, como CouchDB. Sin embargo, principalmente la utilizas a trav\u00e9s de una API en tiempo real que abstrae websockets, autorizaci\u00f3n y suscripciones. El panel de administraci\u00f3n ofrece ambas capacidades, permitiendo tanto la edici\u00f3n en tiempo real como la importaci\u00f3n\/exportaci\u00f3n de JSON. Si en tu c\u00f3digo sigues lo mismo, te sorprender\u00e1s de cu\u00e1nta cantidad de c\u00f3digo especializado desaparecer\u00e1 al darte cuenta de que el patch y diff de JSON resuelven el 90% de las tareas rutinarias de manejo de estado persistente.<\/p>\n<p>El modelo de datos de Firestore es similar a JSON, pero se diferencia en algunos aspectos cr\u00edticos. Ya he mencionado la ausencia de arrays dentro de arrays. El modelo de sub-colecciones es que son conceptos de primera clase, separados del documento JSON que las contiene. Como no existe una serializaci\u00f3n lista para esto, se requiere una ruta de ejecuci\u00f3n de c\u00f3digo especializada para leer y escribir datos. Para manejar colecciones personalizadas, es necesario escribir tus propios scripts y herramientas. El panel de administraci\u00f3n solo te permite hacer peque\u00f1os cambios en un campo a la vez, y no tiene capacidades de importaci\u00f3n\/exportaci\u00f3n.<\/p>\n<p>Tomaron una base de datos NoSQL en tiempo real y la convirtieron en una lenta no-SQL con auto-fusi\u00f3n y una columna separada de no-JSON. <i>Algo en la l\u00ednea de GraftQL<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Esta base de datos est\u00e1 en llamas\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/c6e842418996c96f1efa873774f35f44.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Java caliente<\/h2>\n<p>\nSi Firestore ten\u00eda que volverse m\u00e1s confiable y escalable, la iron\u00eda es que el desarrollador promedio obtendr\u00e1 una soluci\u00f3n menos confiable que al elegir FireBase 'listo para usar'. El software que necesita el Administrador de Base de Datos Gru\u00f1\u00f3n, requiere un nivel de esfuerzo y calibre de especialistas que es simplemente irrealista para el nicho en el que supuestamente deber\u00eda haber un buen producto. Es como si HTML5 Canvas no fuera en absoluto un reemplazo para Flash, si no hay herramientas de desarrollo y reproductor. Adem\u00e1s, Firestore se ha enredado en su b\u00fasqueda de la limpieza de datos y la validaci\u00f3n est\u00e9ril, algo que simplemente no se alinea con la forma en que el usuario promedio de negocios <i>prefiere trabajar<\/i>: para \u00e9l, no es necesario, ya que hasta el final todo es un borrador.<\/p>\n<p>La principal desventaja de FireBase es que el cliente se cre\u00f3 varios a\u00f1os antes de lo necesario, incluso antes de que la mayor\u00eda de los desarrolladores web conocieran la inmutabilidad. Debido a esto, FireBase asume que vas a modificar los datos y, por lo tanto, no aprovecha los beneficios de la inmutabilidad proporcionada por el usuario. Adem\u00e1s, no reutiliza los datos en los snapshots enviados al usuario, lo que hace que realizar diffs sea mucho m\u00e1s complicado. Para documentos grandes, su mecanismo transaccional basado en diffs modificables simplemente no es adecuado. Chicos, ya tenemos <code>WeakMap<\/code> en JavaScript. Es conveniente.<\/p>\n<p>Si das a los datos la forma adecuada y no haces los \u00e1rboles demasiado voluminosos, se puede evitar este problema. Pero me pregunto, \u00bfser\u00eda FireBase mucho m\u00e1s interesante si los desarrolladores lanzaran una API del cliente realmente buena que utilizara la inmutabilidad junto con consejos pr\u00e1cticos serios sobre la estructura de bases de datos? En vez de eso, parece que intentaron arreglar algo que no estaba roto, y result\u00f3 peor.<\/p>\n<p>No s\u00e9 toda la l\u00f3gica detr\u00e1s de la creaci\u00f3n de Firestore. Reflexionar sobre los motivos que surgen dentro de una caja negra tambi\u00e9n es parte de la diversi\u00f3n. Tal contraposici\u00f3n de dos bases de datos extremadamente similares pero incomparables es bastante rara. Es como si alguien pensara: <i>\u00abFirebase es solo una funci\u00f3n que podemos emular en Google Cloud\u00bb<\/i>, pero al mismo tiempo a\u00fan no ha descubierto el concepto de definir los requisitos del mundo real o de crear soluciones \u00fatiles que satisfacen todos esos requisitos. <i>\u00abDeja que lo piensen los desarrolladores. Simplemente haz que la interfaz de usuario se vea bien... \u00bfSe puede a\u00f1adir m\u00e1s fuego?\u00bb<\/i><\/p>\n<p>Entiendo un par de cosas sobre las estructuras de datos. Veo claramente que la concepci\u00f3n de \u00abtodo en un gran \u00e1rbol JSON\u00bb es un intento de abstraer de la base de datos cualquier sensaci\u00f3n de estructura a gran escala. Esperar que el software simplemente gestione cualquier fractal dudoso de estructura de datos es simplemente una locura. No necesito ni imaginar lo mal que pueden estar las cosas; he llevado a cabo auditor\u00edas de c\u00f3digo rigurosas y <i>he visto cosas que ustedes, humanos, ni siquiera han so\u00f1ado.<\/i>. Pero tambi\u00e9n s\u00e9 c\u00f3mo lucen las buenas estructuras, <noindex><a rel=\"nofollow\" href=\"https:\/\/acko.net\/blog\/apis-are-about-policy\">c\u00f3mo usarlas<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/acko.net\/blog\/software-development-as-advanced-damage-control\/\">por qu\u00e9 es necesario hacerlo.<\/a><\/noindex>Puedo imaginar un mundo en el que Firestore parecer\u00eda completamente l\u00f3gica, y las personas que la crearon pensar\u00edan que hicieron un buen trabajo. Pero no vivimos en ese mundo.<\/p>\n<p>El soporte para construir consultas en FireBase es deficiente por cualquier est\u00e1ndar, pr\u00e1cticamente no existe. Definitivamente requiere mejoras o al menos una revisi\u00f3n. Pero Firestore no es mucho mejor, ya que est\u00e1 limitada por los mismos \u00edndices unidimensionales que existen en un SQL simple. Si necesitas consultas que las personas realicen con datos desordenados, se requiere b\u00fasqueda de texto completo, filtros en varios rangos y un orden arbitrario definido por el usuario. Con un examen m\u00e1s cuidadoso, las funciones del SQL simple son demasiado limitadas por s\u00ed solas. Adem\u00e1s, las \u00fanicas consultas SQL que las personas pueden ejecutar en producci\u00f3n son consultas r\u00e1pidas. Necesitar\u00e1s una soluci\u00f3n especializada para la indexaci\u00f3n con estructuras de datos bien pensadas. Para todo lo dem\u00e1s, al menos deber\u00eda haber un map-reduce incremental o algo similar.<\/p>\n<p>Si buscas informaci\u00f3n sobre esto en la documentaci\u00f3n de Google, espero que te dirijan hacia algo como BigTable y BigQuery. Sin embargo, todas estas soluciones vienen acompa\u00f1adas de una cantidad de denso jerga corporativa que te har\u00e1 regresar r\u00e1pidamente y empezar a buscar algo diferente.<\/p>\n<p>Lo \u00faltimo que necesitas en una base de datos en tiempo real es algo creado por personas y para personas, trabajando bajo una escala de sueldos para la direcci\u00f3n.<\/p>\n<p><i>(*) Esto es una broma, no existe tal cosa como <noindex><a rel=\"nofollow\" href=\"http:\/\/seriot.ch\/parsing_json.php\">compatibilidad con JSON al 100%<\/a><\/noindex>.<\/i><\/p>\n<p><\/p>\n<h4>Publicidad<\/h4>\n<p>\nBuscando <noindex><a rel=\"nofollow\" href=\"https:\/\/vdsina.ru\/cloud-servers?partner=habr130\">VDS<\/a><\/noindex> para depurar proyectos, \u00bfservidor para desarrollo y alojamiento? Definitivamente eres nuestro cliente \ud83d\ude42 Precios por d\u00eda para servidores de diversas configuraciones, antiDDoS y licencias de Windows ya est\u00e1n incluidos en el costo.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/vdsina.ru\/cloud-servers?partner=habr130\"><img decoding=\"async\" alt=\"Esta base de datos est\u00e1 en llamas\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/f1215924e9c1c41d00f7c71c6c569aa4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/vdsina\/blog\/522672\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u041c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043d\u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u042d\u0442\u043e \u0431\u044b\u043b \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u0440\u0430\u043d\u043d\u0435\u0433\u043e React \u0438 CouchDB. \u041e\u043d \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e JSON OT. \u0415\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u0448\u0438\u0440\u043e\u043a\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0444\u0435\u0440\u0430\u0445 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":96466,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-96465","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u041c\u043d\u043e\u0433\u043e \u043b\u0435\u0442.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u042d\u0442\u0430 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0433\u043d\u0435\u2026 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u041c\u043d\u043e\u0433\u043e \u043b\u0435\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-12T05:42:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-12T05:42:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Esta base de datos est\u00e1 en llamas\u2026 | ProHoster","description":"D\u00e9jame contarte una historia t\u00e9cnica. Hace muchos a\u00f1os.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u042d\u0442\u0430 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0433\u043d\u0435\u2026 | ProHoster","og:description":"\u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u041c\u043d\u043e\u0433\u043e \u043b\u0435\u0442.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-12T05:42:27+00:00","article:modified_time":"2020-10-12T05:42:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"96465","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:42:30","updated":"2022-09-29 13:02:04","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/96465","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=96465"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/96465\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/96466"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=96465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=96465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=96465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}