Guest User

Untitled

a guest
Apr 11th, 2018
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.69 KB | None | 0 0
  1. mongod --dbpath /Users/antoniocachuan/data/db
  2. mongo en la otra consola
  3.  
  4. SQL nace 1979 / 250mb $81k por año
  5. por ese motivo buscaron la forma de optimizar
  6. y asi Dennis Ritchie y Brien Kernighan
  7. creadores de C lograron bajar
  8. a $8000 y asi nace SQL y si miramos
  9. todo lo de la forma normal
  10. buscamos no repetir la data justamente para
  11. ahorrar costos
  12.  
  13. Caracteristicas SQL
  14. Expressive Query Language & Secondary Indexes
  15. Strong Consistency
  16. Enterprise Management & Integrations
  17.  
  18. De los años 70 han cambiado...
  19.  
  20. En los 90 Google y Amazon vieron que sus
  21. necesidades no se abastecian con SQL
  22.  
  23. Big Table y DynamoDB, funcionaban muy bien sobre sistemas distribuidos, servidores pequeños o medianos
  24.  
  25. Eran Open Source
  26. Eran no Relacional, se llamaban base de datos de sistemas distribuido
  27.  
  28. Origen del termino
  29. nace en realidad en el 2009 en una conferencia sobre sist. distribuido
  30. y alguien puso el Hashtag de #NoSQL
  31.  
  32. Las Tec NoSQL responden
  33. Flexibilidad: dif tipos de datos, facil cambiar el modelo de dato
  34. Scalability Performance:
  35. Siempre prendida, despliegues globales.
  36.  
  37. El mismo hardware tiene un mejor desempeño
  38. en NoSQl que en SQL por temas de diseño, optimizadas para dar un rendimiendo optimo, mientras que las otras era por temas de disco.
  39.  
  40. Tipos de NoSQL Database, en funcion como almacenan los datos
  41. Key/Value Stores
  42. Column Stores
  43. Graph Stores
  44. Multi-model Databases
  45. Document Stores
  46.  
  47.  
  48. Las BD tienen que decidir entre Consistencia y Habilidad
  49.  
  50. Dos personas en PER Y ESP quieren comprar
  51. un pasaje a NY y en cada pais hay un servidor
  52. y el servidor de PER le avisa a los otros
  53.  
  54. pero si falla la conexion, hay dos opciones
  55. Disponibilidad: sigo trabajando despues y mas adelante resolvere el problema de comunicacion entre nodos
  56.  
  57. Consistencia: Si los nodos no se pueden comunicar no dejo confirmar su reserva a nadie.
  58.  
  59. Clave valor/ KEY/VALUE
  60. -Key es la llave primaria (indices) y value guardo lo que quiera
  61. -Single key lookup
  62. -Very fast single key lookup
  63. -Not so hot for "reverse lookups"
  64. Ej: carrito compra de amazon, lo busco por clave unica
  65. pero si quiero saber cuantos libros de pepito estan en los carritos, no se puede tan facilmente.
  66.  
  67. Recordando: Row Stores (como funciona actualmente las RDBMS)
  68. -Data aliniada por fila Ej: MySQL
  69. -Lee una fila completa cada vez
  70. -Lectura requiriendo una o dos columnas no es muy optimo. Almacenados de forma lineal en el disco, Ej disco vete a la posicion 3540 y empieza a leer secuencialmente. Recordar que las BD relacionales se crearon hace mas de 40 años, cuando todo era mecanico en el disco, por eso para leer toda una fila esa es una solución optima.
  71. Ej yo se que cada registro mide 750 bytes
  72. y quiero leer una columna de varias filas
  73. tengo que leer
  74.  
  75. Column Store
  76. Lo que antes guardabamos por fila,
  77. ahora es por columna
  78. Porque es atractivo?
  79. Mejor para OLAP que OLTP
  80. Append es preferido
  81. La lectura puede traer mas tada del disco
  82. en una sola busqueda
  83. Puedo optimizar el espacio porque tengo columnas con el mismo tipo de dato,
  84. Puedo tener indices parciales
  85. Puedo tener un numero limitado de columnas mas sencilla
  86.  
  87. Los delete y update no son muy optimos
  88.  
  89. Es mucho mas facil hacer insert, es mas orientada para analitica
  90.  
  91.  
  92. Graph Stores
  93. Vertices y nodos
  94. Ej: Soial Networks
  95. Optimo para representar conexiones
  96. Puede ser implementado como key value con la habilidad de guardar enlaces
  97. Si tu caso de uso no es un grafo, no necesitas una db graph
  98.  
  99. Nos interesa mas las relaciones
  100. Ej redes nerunales trabajan mejor con db de grafos
  101.  
  102. Multi-Model Database
  103. Combinan multiples modelos de almacenamiento y acceso
  104.  
  105. Es recientemente nuevo
  106. "polyglot persistence" tengo que hacer update en oracle, mongo, sql server
  107. me ofrece interfas sql y no sql
  108.  
  109. Document Store
  110. Son estructuras de datos ricas usando JSON
  111.  
  112. Ej: Mongo DB, se familiariza con REST,
  113. No es lo mismo almacenar JSON que utilizar un JSON, poder indexar, acceder a la estructura
  114.  
  115. Cualquiera puede ser primario
  116. si se cae uno las replicas pueden ser usadas como primarias
  117.  
  118.  
  119. Segunda Clase
  120. Database - Database
  121. Table Collection
  122. Row Document
  123. Index Index
  124. Join Lookup
  125. Foreign Key Reference
  126. Multi-table transaction - Single document transaction
  127.  
  128. <code>
  129. ./bin/mongo
  130.  
  131. show dbs
  132. db.demo.insert({nombre: "Antonio", apellido: "Terceño", email: ["acachuan@bcp.com.pe", "antoniocachuan@gmail.com"]})
  133. db.demo.insert({nombre: "Manuel", apellido: "montoya", email: ["mmontoya@bcp.com.pe", "manuel.montoya@gmail.com"]})
  134. db.demo.findOne()
  135. db.demo.find()
  136. db.demo.find().pretty()
  137.  
  138. ¿Qué es el object _id? Siempre tiene que existir
  139. 575420c87a75dbb02b4f45cb
  140. TS------ID----PID-Count-
  141. Count es 6 bytes
  142.  
  143. show.collections
  144.  
  145. db.demo2.insert({x:1, y:2, z:3})
  146.  
  147. show collections
  148.  
  149. Aplicando:
  150. use blog
  151. db.users.insert({"username":"acachuan", "password":"top secret", "lang":"ES"})
  152.  
  153. db.users.findOne()
  154.  
  155. Mongo DB Datatypes
  156.  
  157. null: sirve para representar valores que no existen
  158. { "primerNombre" : null }
  159.  
  160. boolean: Para representar valores falso y verdadero
  161. { "esEditable" : true }
  162.  
  163. number: soporta 64 bits floating-point, para procesar números enteros. MongoDB provee NumberLong y NumberInt que representa 4 y 8 bytes respectivamente.
  164.  
  165. string: string representa colección de caracteres. Mongodb soporta UTF-*
  166.  
  167. date: MongoDB stores dates in milliseconds
  168. { "birthday" : new Date(1501086866059)}
  169.  
  170. array: A set or list of values represents arrays
  171. { "cities" : ["Lima", "Piura", "Arequipa"]}
  172.  
  173. embedded document: another mongodb document like structure
  174. {
  175. "_id": ObjectId("597465456cd654"),
  176. "firstName": "Emilio",
  177. "lastName": "Alipazaga",
  178. "age": 45,
  179. "email": "antonio@gmail.com",
  180. "address":[
  181. {
  182. "city":"lima",
  183. "state": "LIM",
  184. "country": "Peru"
  185. }
  186. ]
  187. }
  188.  
  189.  
  190. Data es guardada en forma de colecciones
  191.  
  192. Para crear una DB
  193. use antonio_db;
  194.  
  195. La base por defecto de mongo es test
  196.  
  197. show databases;
  198.  
  199.  
  200. Crear una colección
  201. db.createCollection("users_profile");
  202.  
  203. Collections are schemaless
  204.  
  205. The document is a collection of key-value pairs. The key is also known as an attribute.
  206.  
  207. Ejemplo de documento:
  208.  
  209. {
  210. "_id": ObjectId("4545ds545dsds"),
  211. "title": "MongoDB Overview",
  212. "description": "Mongo DB is no sql database",
  213. "tags" : [
  214. "MongoDB",
  215. "database",
  216. "NoSQL"
  217. ],
  218. "likes" : 100.0,
  219. "comments":[
  220. {
  221. "user":"user1",
  222. "message": "My first comment",
  223. "dataCreated": ISODate("2011-02-19T20:45:00.000Z"),
  224. "like":0.0
  225. },
  226. {
  227. "user":"user1",
  228. "message": "My first comment",
  229. "dataCreated": ISODate("2011-02-19T20:45:00.000Z"),
  230. "like":0.0
  231. }
  232. ]
  233.  
  234. }
  235.  
  236. SQL MongoDB
  237. Database Database
  238. Table Collection
  239. Row Document
  240. Column Field
  241.  
  242.  
  243. Caracteristicas
  244. Colecciones en MongoDB son schemaless
  245. La estructura de un solo documento es simple y claro
  246. Complex joins are not required as MongoDB database supports an embedded document structure
  247.  
  248. MongoDB has rich query support
  249.  
  250. MongoDB is easy to scale
  251.  
  252. Conversion or mapping between database objects and application objects is simple as most of the application supports JSON mapping with database objects
  253.  
  254. Usos o aplicaciones de MongoDB
  255.  
  256. User profile: tiene campos como records criminales, promotions, telefonos,direcciones
  257.  
  258. Product and catalog data:nuevos productos son agregados dia a dia
  259.  
  260. Metadata: A veces se necesita metadata para describir nuestra data
  261.  
  262. Content: MongoDB is mainly a document database
  263.  
  264. Limitaciones Mongo
  265. Maximo tamaño de documento es 16mb
  266.  
  267. Maximo anidamiento es 100
  268.  
  269. Maximo namespace (database + collection name) es 123
  270.  
  271. db name está limitado a 64 caracteres
  272.  
  273. Operaciones
  274. Si insertamos un documento a una colección. Si la colección no existe MongoDB creará una nueva colección
  275.  
  276. db.collection.insertOne();
  277. db.collection.insertMany();
  278.  
  279. db.users_profile.insertOne(
  280. {
  281. userId: 1,
  282. firstName: "John",
  283. lastName: "Richard",
  284. age: 26,
  285. email: "john29992@mail.com"
  286. }
  287. )
  288.  
  289. Este metodo retorna un documento que contiene documents_id
  290.  
  291. insertMany() can insert multiple documents into single collection at a time. We have to pass an array of documents to the method
  292.  
  293.  
  294. db.users_profile.inserMany([
  295. {
  296. userId: 1, firstName: "John", lastName: "Richard", age: 26, email: "John@gmail.com"
  297.  
  298. },
  299. {
  300. userId: 2, firstName: "Antonio", lastName: "Richard", age: 26, email: "antonio@gmail.com"
  301. },
  302. {
  303. userId: 3, firstName: "Martin", lastName: "Richard", age: 26, email: "Martin@gmail.com"
  304. }
  305. ])
  306.  
  307. db.users_profile.insertOne({userId: 1,firstName: "John",lastName: "Richard",age: 26,email: "john29992@mail.com"})
  308.  
  309. db.users_profile.insertMany([{userId: 1, firstName: "John", lastName: "Richard", age: 26, email: "John@gmail.com"},{userId: 2, firstName: "Antonio", lastName: "Richard", age: 26, email: "antonio@gmail.com"},{userId: 3, firstName: "Martin", lastName: "Richard", age: 26, email: "Martin@gmail.com"}]);
  310.  
  311. En mongo cada document requiere un _id que actua como primary key
  312.  
  313. Otros metodos:
  314.  
  315. db.collection.update()
  316. db.collection.updateOne()
  317. db.collection.updateMany()
  318. db.collection.findAndModify()
  319. db.collection.findOneAndUpdate()
  320. db.collection.findOneAndReplace()
  321. db.collection.save()
  322. db.collection.bulkWrite()
  323.  
  324.  
  325. Operaciones de lectura
  326.  
  327. Para traernos todos los usuarios
  328. db.users_profile.find({});
  329.  
  330.  
  331. Para traernos con filtros
  332. db.users_profile.find({firstName: "Antonio"});
  333.  
  334. Aplicando condicionales y operadores lógicos
  335.  
  336. Usando In
  337.  
  338. db.users_profile.find({
  339. firstName:{
  340. $in:["Antonio", "Jhon"]
  341. }
  342. });
  343.  
  344. db.users_profile.find({firstName:{$in:["Antonio", "Jhon"]}});
  345.  
  346. Usando And
  347.  
  348. db.users_profile.find({
  349. firstName: "John",
  350. age:{$lt:29}
  351.  
  352. });
  353.  
  354. Equivalente "SELECT * FROM user_profiles WHERE firstName='John' AND age<30;"
  355.  
  356.  
  357. Apply the or
  358.  
  359. db.users_profile.find({
  360. $or: [
  361. {"firstName": "John"},
  362. {"age": {$lt: 30}}
  363. ]
  364. });
  365.  
  366.  
  367. db.users_profile.find({
  368. "firstName":"John",
  369. $or : [
  370. { "age": {$lt: 30}},
  371. {"lastName": /^s/},
  372. ]
  373. });
  374.  
  375. Equivalente
  376. SELECT * FROM user_profiles WHERE firstName='John'
  377. AND age<30 OR lastName like 's%';
  378.  
  379.  
  380. Operadores de comparacion
  381. Operator Description
  382. $eq Matches values that equals a specified value
  383.  
  384. $gt Matches values that are greater than a specified value
  385.  
  386. $gte Matches values that are greater than or equal to a specified value
  387.  
  388. $lt Matches values that are less than a specified value$lteMatches values that are less than or equal to a specified value
  389.  
  390. $ne Matches values that are not equal to a specified value
  391.  
  392. $in Matches values that are specified in a set of values
  393.  
  394. $nin Matches values that are not specified in a set of values
  395.  
  396.  
  397. Operadores logicos
  398. Operator
  399.  
  400. Description
  401.  
  402. $or
  403.  
  404. Joins query clauses with the OR operator and returns all the documents that match any condition of the clause.
  405.  
  406. $and
  407.  
  408. Joins query clauses with the AND operator and returns documents that match all the conditions of all the clauses.
  409.  
  410. $not
  411.  
  412. Inverts the effects of the query expression and returns all the documents that do not match the given criteria.
  413.  
  414. $nor
  415.  
  416. Joins query clauses with the logical NOR operator and returns all the documents that match the criteria specified in the clauses.
  417.  
  418. The Updade operation
  419.  
  420. db.users_profile.updateOne({userId : 1}, {$set: { age:30 }})
  421.  
  422. db.users_profile.updateMany({age : 30}, {$set: { age:35 }})
Add Comment
Please, Sign In to add comment