Categorías
Python

Cómo implementar una pila de Python

 

Tabla de Contenidos

  • convertirse en un EngineerWhat datos no un ingeniero de datos Do? ¿Cómo ayuda puede Python de datos de Ingenieros?
  • ¿Qué ingeniero Una de Datos Do? Ayuda
  • ¿Cómo puede Python Ingenieros de datos?
  • Contestación de Datos Ingeniero preguntas de la entrevista
  • Preguntas sobre Relacional DatabasesQ1: relacional vs no relacionales DatabasesA SQLite ExampleQ2: SQL agregación FunctionsQ3: Aumentar la velocidad de SQL QueriesQ4: Depuración de SQL consultas
  • P1: relacional vs no relacionales de bases de datos
  • Un SQLite Ejemplo
  • P2: SQL de agregación Funciones
  • P3: Aumentar la velocidad de consultas SQL
  • P4: Depuración de SQL consultas
  • Preguntas sobre no relacionales DatabasesA MongoDB ExampleQ5: Los datos de la consulta con MongoDBQ6: NoSQL vs SQL
  • Un MongoDB Ejemplo
  • Q5: consulta de datos con MongoDB
  • P6: NoSQL vs SQL
  • Preguntas sobre Cache DatabasesA Redis ExampleQ7: Cómo utilizar la caché de bases de datos
  • Un Redis Ejemplo
  • P7: ¿Cómo utilizar la caché de bases de datos
  • Las preguntas sobre patrones de diseño y ETL ConceptsQ8: ETL Patrones de diseño en Big DataQ10:: ChallengesQ9 Aspectos comunes del proceso de ETL y de datos grandes flujos de trabajo
  • P8: ETL Desafíos
  • P9: patrones de diseño en grandes volúmenes de datos
  • Q10: Aspectos comunes del proceso de ETL y de datos grandes flujos de trabajo
  • Conclusión
  • lo que hace un ingeniero de datos Do? Ayuda
  • ¿Cómo puede Python Ingenieros de datos?
  • Q1: Relational vs no relacionales de bases de datos
  • A SQLite Ejemplo
  • Q2: SQL de agregación Funciones
  • Q3: El exceso de velocidad Q4 Hasta consultas SQL
  • : Depuración de SQL consultas
  • A MongoDB Ejemplo
  • Q5: consulta de datos con MongoDB
  • P6: NoSQL vs SQL
  • Un Redis Ejemplo
  • P7: ¿Cómo utilizar la caché de bases de datos
  • Q8: ETL Desafíos
  • Q9: patrones de diseño en grandes volúmenes de datos
  • Q10: Aspectos comunes del proceso ETL y de datos grandes flujos de trabajo

el ir a entrevistas puede ser un largo y agotador proceso, y técnicas de entrevistas pueden ser aún más estresante! Este tutorial está dirigido a prepararse para las preguntas más comunes que se encontrará durante su entrevista ingeniero de datos. Vas a aprender cómo responder a preguntas acerca de las bases de datos, Python y SQL.

Al final de este tutorial, usted será capaz de:

  • Entender preguntas de la entrevista ingeniero de datos comunes
  • distinguir entre las bases de datos relacionales y no relacionales
  • crear bases de datos que utilizan Python
  • uso de Python para consultas Bono de datos

gratuito: Haga clic aquí para obtener acceso a un capítulo de trucos Python: El libro que le muestra las mejores prácticas de Python con ejemplos sencillos puede aplicar instantáneamente a escribir código más bonito + Pythonic.

convertirse en un ingeniero de datos

El papel de ingeniería de datos puede ser un enorme y variado uno. Usted necesita tener un conocimiento práctico de múltiples tecnologías y conceptos. ingenieros de datos son flexibles en su pensamiento. Como resultado, pueden ser competentes en varios temas, tales como bases de datos, desarrollo de software, DevOps, y grandes volúmenes de datos.

¿Qué ingeniero Una de Datos Do?

Dada su conjunto de habilidades variadas, un papel de ingeniería de datos puede abarcar muchas diferentes descripciones de trabajo. Un ingeniero de datos puede ser responsable de diseño de base de datos, el diseño del esquema, y ​​la creación de múltiples soluciones de bases de datos. Este trabajo también podría implicar un administrador de base de datos.

Como ingeniero de datos , que podría actuar como un puente entre la base de datos y los equipos científicos de datos. En ese caso, usted será responsable de la limpieza y preparación de datos, también. Si se trata de datos grande, entonces es su trabajo para llegar a una solución eficiente para que los datos. Este trabajo puede superponerse con el papel DevOps.

Usted también necesitará para realizar consultas de datos eficientes para la presentación de informes y análisis. Puede que tenga que interactuar con múltiples bases de datos o la aplicación de procedimientos almacenados. Para muchas soluciones como sitios web o servicios de alto tráfico, puede haber más de una base de datos actual. En estos casos, el ingeniero de datos es responsable de la creación de las bases de datos, mantenimiento de los mismos, y la transferencia de datos entre ellos. Ayuda

¿Cómo puede Python Ingenieros de datos?

Python es conocida por ser la navaja suiza de los lenguajes de programación. Es especialmente útil en la ciencia de datos, los sistemas de back-end, y secuencias de comandos del lado del servidor. Eso es porque Python es de tipado fuerte, sintaxis sencilla, y una abundancia de bibliotecas de terceros para su uso. Pandas, SciPy, Tensorflow, SQLAlchemy y NumPy son algunas de las bibliotecas más utilizados en la producción a través de diferentes industrias.

que es más importante, disminuye el tiempo de desarrollo de Python, lo que significa menos gastos para las empresas. Para un ingeniero de datos, más la ejecución de código es la base de datos de ruedas, no vinculado a la CPU. Debido a esto, tiene sentido para sacar provecho de la simplicidad de Python, incluso a costa de un rendimiento más lento en comparación con los lenguajes compilados como C # y Java.

Responder a preguntas de la entrevista de datos Ingeniero

Ahora que ya sabe cuál es su papel podría consistir, es hora de aprender cómo responder a algunas preguntas de la entrevista ingeniero de datos! Si bien hay una gran cantidad de terreno que cubrir, verá ejemplos prácticos de Python en todo el tutorial que le guiará a lo largo del camino.

Preguntas sobre bases de datos relacionales

bases de datos son uno de los componentes más importantes en un sistema. Sin ellos, no puede haber ningún estado y sin antecedentes. Si bien no se puede tener en cuenta el diseño de base de datos a ser una prioridad, saber que puede tener un impacto significativo en la rapidez con la carga de la página. En los últimos años, varias grandes empresas han introducido varias herramientas y técnicas nuevas:

  • NoSQL
  • caché de bases de datos de
  • Gráfico bases de datos de soporte
  • NoSQL en bases de datos SQL

Estas y otras técnicas se inventaron para tratar de aumentar la velocidad a la que las bases de datos procesan peticiones. Es probable que tenga que hablar sobre estos conceptos en su entrevista ingeniero de datos, por lo que vamos a repasar algunas preguntas!

P1: relacional vs no relacionales de bases de datos

Una base de datos relacional es uno donde se almacenan los datos en forma de una tabla. Cada tabla tiene un esquema , que es de las columnas y los tipos se requiere un registro a tener. Cada esquema debe tener al menos una clave principal que identifica de forma exclusiva ese registro. En otras palabras, no hay filas duplicadas en la base de datos. Por otra parte, cada tabla se puede relacionar con otras tablas utilizando las claves externas.

Un aspecto importante de las bases de datos relacionales es que un cambio en un esquema debe ser aplicado a todos los registros. Esto a veces puede causar roturas y grandes dolores de cabeza durante las migraciones. bases de datos no relacionales hacer frente a las cosas de una manera diferente. Ellos son inherentemente esquema-menos, lo que significa que los registros se pueden guardar con diferentes esquemas y con una estructura diferente, anidada. Registros todavía puede tener las claves primarias, sino un cambio en el esquema está hecho sobre una base de entrada por entrada.

Usted tendría que realizar una prueba de comparación de velocidad basado en el tipo de función que se realiza. Puede elegir INSERT, UPDATE, DELETE, u otra función. el diseño del esquema, índices, el número de agregaciones, y el número de registros también afectará a este análisis, por lo que tendrá que probar a fondo. Vas a aprender más acerca de cómo hacer esto más adelante.

bases de datos también difieren en escalabilidad . Una base de datos no relacional puede ser menos de un dolor de cabeza de distribuir. Esto se debe a un conjunto de registros relacionados se puede almacenar fácilmente en un nodo particular. Por otro lado, las bases de datos relacionales requieren más reflexión y por lo general hacen uso de un sistema maestro-esclavo.

Un SQLite Ejemplo

Ahora que ha contestado a lo que son las bases de datos relacionales, es el momento de profundizar en algunos Python! SQLite es una base de datos conveniente que se puede utilizar en su máquina local. La base de datos es un archivo único, lo que lo hace ideal para la creación de prototipos propósitos. En primer lugar, importar la biblioteca de Python requerido y crear una nueva base de datos:

import sqlite3

db = sqlite3.connect(':memory:') # Using an in-memory database
cur = db.cursor()

Ahora estás conectado a una base de datos en memoria y que su objeto de cursor listo para funcionar.

A continuación, vamos a crear las siguientes tres tablas:

Ahora que tiene una idea de lo que sus mesas se verá así, puede seguir adelante y crear ellos:

cur.execute('''CREATE TABLE IF NOT EXISTS Customer (
id integer PRIMARY KEY,
firstname varchar(255),
lastname varchar(255) )''')
cur.execute('''CREATE TABLE IF NOT EXISTS Item (
id integer PRIMARY KEY,
title varchar(255),
price decimal )''')
cur.execute('''CREATE TABLE IF NOT EXISTS BoughtItem (
ordernumber integer PRIMARY KEY,
customerid integer,
itemid integer,
price decimal,
CONSTRAINT customerid
FOREIGN KEY (customerid) REFERENCES Customer(id),
CONSTRAINT itemid
FOREIGN KEY (itemid) REFERENCES Item(id) )''')

Has pasado una consulta a cur.execute () para crear sus tres tablas.

El último paso consiste en rellenar las tablas con los datos:

cur.execute('''INSERT INTO Customer(firstname, lastname)
VALUES ('Bob', 'Adams'),
('Amy', 'Smith'),
('Rob', 'Bennet');''')
cur.execute('''INSERT INTO Item(title, price)
VALUES ('USB', 10.2),
('Mouse', 12.23),
('Monitor', 199.99);''')
cur.execute('''INSERT INTO BoughtItem(customerid, itemid, price)
VALUES (1, 1, 10.2),
(1, 2, 12.23),
(1, 3, 199.99),
(2, 3, 180.00),
(3, 2, 11.23);''') # Discounted price

Ahora que hay algunos registros en cada tabla, puede utilizar estos datos para responder a algunas preguntas de la entrevista ingeniero de más datos.

P2: funciones de agregación Funciones SQL

agregación son aquellos que realizan una operación matemática en un conjunto de resultados. Algunos ejemplos incluyen AVG, COUNT, MIN, MAX y SUM. A menudo, tendrá que GROUP BY y HAVING para complementar estas agregaciones. Una función de agregación útil es AVG, que se puede utilizar para calcular la media de un conjunto de resultados dado:

>>> cur.execute('''SELECT itemid, AVG(price) FROM BoughtItem GROUP BY itemid''')
>>> print(cur.fetchall())
[(1, 10.2), (2, 11.73), (3, 189.995)]

Aquí, usted ha recuperado el precio promedio para cada uno de los artículos comprados en su base de datos. Se puede ver que el elemento con un itemid de 1 tiene un precio promedio de $ 10.20.

Para hacer que la salida anterior más fácil de entender, se puede visualizar el nombre del artículo en lugar de la ITEMID:

>>> cur.execute('''SELECT item.title, AVG(boughtitem.price) FROM BoughtItem as boughtitem
... INNER JOIN Item as item on (item.id = boughtitem.itemid)
... GROUP BY boughtitem.itemid''')
...
>>> print(cur.fetchall())
[('USB', 10.2), ('Mouse', 11.73), ('Monitor', 189.995)]

Ahora, se ve más fácilmente que el artículo con un precio promedio de $ 10.20 corresponde a la USB.

Otra agregación útil es SUM. Puede utilizar esta función para mostrar la cantidad total de dinero que cada cliente dedicado:

>>> cur.execute('''SELECT customer.firstname, SUM(boughtitem.price) FROM BoughtItem as boughtitem
... INNER JOIN Customer as customer on (customer.id = boughtitem.customerid)
... GROUP BY customer.firstname''')
...
>>> print(cur.fetchall())
[('Amy', 180), ('Bob', 222.42000000000002), ('Rob', 11.23)]

En promedio, el cliente llamada Amy gastó cerca de $ 180, mientras que Rob pasó solamente $ 11.23!

Si su entrevistador le gusta bases de datos, entonces es posible que desee poner al día las consultas anidadas, tipos de combinación, y los pasos de una base de datos relacional se tarda en realizar la consulta.

P3: Aumentar la velocidad de consultas SQL

velocidad depende de varios factores, pero es más afectadas por la cantidad de cada uno de los siguientes están presentes:

  • une
  • agregaciones
  • Recorridos
  • Records

Cuanto mayor sea la número de combinaciones, cuanto mayor sea la complejidad y cuanto mayor sea el número de recorridos en las tablas. Varias combinaciones son bastante caros para llevar a cabo en varios miles de registros que implican varias mesas debido a que la base de datos también tiene que almacenar en caché el resultado intermedio! En este punto, es posible empezar a pensar acerca de cómo aumentar el tamaño de su memoria.

La velocidad también se ve afectada por la existencia o no son índices presente en la base de datos. Los índices son muy importantes y le permiten buscar rápidamente a través de una mesa y encontrar un partido por alguna columna especificada en la consulta.

Índices ordenar los registros a costa de un mayor tiempo de inserción, así como algunos de almacenamiento. Varias columnas se pueden combinar para crear un único índice. Por ejemplo, las columnas de fecha y precio pueden ser combinados debido a que su consulta depende de dos condiciones.

P4: Depuración de SQL consultas

La mayoría de las bases de datos incluyen un Explicar consulta plan que describe los pasos de la base de datos tarda en ejecutar la consulta. Para SQLite, puede habilitar esta funcionalidad mediante la adición Explicar consulta PLAN delante de una instrucción SELECT:

>>> cur.execute('''EXPLAIN QUERY PLAN SELECT customer.firstname, item.title,
... item.price, boughtitem.price FROM BoughtItem as boughtitem
... INNER JOIN Customer as customer on (customer.id = boughtitem.customerid)
... INNER JOIN Item as item on (item.id = boughtitem.itemid)''')
...
>>> print(cur.fetchall())
[(4, 0, 0, 'SCAN TABLE BoughtItem AS boughtitem'),
(6, 0, 0, 'SEARCH TABLE Customer AS customer USING INTEGER PRIMARY KEY (rowid=?)'),
(9, 0, 0, 'SEARCH TABLE Item AS item USING INTEGER PRIMARY KEY (rowid=?)')]

esta consulta intentos a la lista el nombre, título del artículo, precio original, y el precio de compra para todos los artículos comprados.

Esto es lo que el plan de consulta en sí parece:

SCAN TABLE BoughtItem AS boughtitem
SEARCH TABLE Customer AS customer USING INTEGER PRIMARY KEY (rowid=?)
SEARCH TABLE Item AS item USING INTEGER PRIMARY KEY (rowid=?)

Tenga en cuenta que traiga sentencia en el código Python sólo devuelve la explicación, pero no los resultados. Esto se debe a Explicar consulta plan no está destinado a ser utilizado en la producción.

Las preguntas sobre las bases de datos no relacionales

En la sección anterior, se colocan las diferencias entre las bases de datos relacionales y no relacionales y SQLite usada con Python. Ahora usted va a centrarse en NoSQL. Su objetivo es poner de relieve sus puntos fuertes, las diferencias, y casos de uso.

Un MongoDB Ejemplo

Vamos a usar los mismos datos que antes, pero esta vez su base de datos será MongoDB. Esta base de datos NoSQL es basada en documentos y escalas muy bien. Lo primero es lo primero, tendrá que instalar la biblioteca de Python requerido:

$ pip install pymongo

También puede ser que desee instalar el compás Comunidad MongoDB. Incluye un local IDE que es perfecto para la visualización de la base de datos. Con ella, se puede ver los registros creados, crear disparadores, y actuar como administrador visual de la base de datos.

Nota: Para ejecutar el código en esta sección, se necesita un servidor de base de datos en funcionamiento. Para obtener más información sobre cómo configurarlo, echa un vistazo a Introducción a MongoDB y Python.

Así es como se crea la base de datos e insertar algunos datos:

import pymongo

client = pymongo.MongoClient("mongodb://localhost:27017/")

# Note: This database is not created until it is populated by some data
db = client["example_database"]

customers = db["customers"]
items = db["items"]

customers_data = [{ "firstname": "Bob", "lastname": "Adams" },
{ "firstname": "Amy", "lastname": "Smith" },
{ "firstname": "Rob", "lastname": "Bennet" },]
items_data = [{ "title": "USB", "price": 10.2 },
{ "title": "Mouse", "price": 12.23 },
{ "title": "Monitor", "price": 199.99 },]

customers.insert_many(customers_data)
items.insert_many(items_data)

Como habrá notado, MongoDB almacena los registros de datos en colecciones , que son el equivalente a una lista de diccionarios en Python. En la práctica, las tiendas de MongoDB BSON documentos.

Q5: try de consulta de datos MongoDB Con

Vamos a replicar la tabla BoughtItem en primer lugar, como lo hizo en SQL. Para ello, debe añadir un nuevo campo para un cliente. documentación especifica de MongoDB que la palabra clave operador establece se puede utilizar para actualizar un registro sin tener que escribir todos los campos existentes:

# Just add "boughtitems" to the customer where the firstname is Bob
bob = customers.update_many(
{"firstname": "Bob"},
{
"$set": {
"boughtitems": [
{
"title": "USB",
"price": 10.2,
"currency": "EUR",
"notes": "Customer wants it delivered via FedEx",
"original_item_id": 1
}
]
},
}
)

Observe cómo ha agregado campos adicionales al cliente sin definir explícitamente el esquema de antemano. ¡Hábil!

De hecho, se puede actualizar a otro cliente con un esquema ligeramente alterada:

amy = customers.update_many(
{"firstname": "Amy"},
{
"$set": {
"boughtitems":[
{
"title": "Monitor",
"price": 199.99,
"original_item_id": 3,
"discounted": False
}
]
} ,
}
)
print(type(amy)) # pymongo.results.UpdateResult

similar a SQL, bases de datos basadas en documentos también permiten consultas y agregaciones a ser ejecutados. Sin embargo, la funcionalidad puede diferir tanto sintácticamente y en la ejecución subyacente. De hecho, es posible que haya notado que MongoDB reserva el carácter $ para especificar algún comando o agregación de los registros, tales como $ grupo. Usted puede aprender más acerca de este comportamiento en los documentos oficiales.

Se pueden realizar consultas al igual que lo hizo en SQL. Para empezar, se puede crear un índice:

>>> customers.create_index([("name", pymongo.DESCENDING)])

Esto es opcional, pero se acelera consultas que requieren resolución de nombres.

A continuación, puede recuperar los nombres de los clientes en orden ascendente:

>>> items = customers.find().sort("name", pymongo.ASCENDING)

También puede iterar a través de e imprimir los artículos comprados:

>>> for item in items:
... print(item.get('boughtitems'))
...
None
[{'title': 'Monitor', 'price': 199.99, 'original_item_id': 3, 'discounted': False}]
[{'title': 'USB', 'price': 10.2, 'currency': 'EUR', 'notes': 'Customer wants it delivered via FedEx', 'original_item_id': 1}]

Incluso puede recuperar una lista de nombres únicos en la base de datos:

>>> customers.distinct("firstname")
['Bob', 'Amy', 'Rob']

Ahora que se conocen los nombres de los clientes en su base de datos, puede crear una consulta para recuperar información sobre ellos:

>>> for i in customers.find({"$or": [{'firstname':'Bob'}, {'firstname':'Amy'}]},
... {'firstname':1, 'boughtitems':1, '_id':0}):
... print(i)
...
{'firstname': 'Bob', 'boughtitems': [{'title': 'USB', 'price': 10.2, 'currency': 'EUR', 'notes': 'Customer wants it delivered via FedEx', 'original_item_id': 1}]}
{'firstname': 'Amy', 'boughtitems': [{'title': 'Monitor', 'price': 199.99, 'original_item_id': 3, 'discounted': False}]}

Aquí está la consulta SQL equivalente:

SELECT firstname, boughtitems FROM customers WHERE firstname LIKE ('Bob', 'Amy')

Tenga en cuenta que a pesar de que la sintaxis puede diferir sólo ligeramente, hay una diferencia drástica la forma en que se ejecutan las consultas debajo de la campana. Esto es de esperarse debido a las diferentes estructuras de consulta y los casos de uso entre las bases de datos SQL y NoSQL.

P6: NoSQL vs SQL

Si usted tiene un esquema en constante cambio, como la información de regulación financiera, entonces NoSQL puede modificar los registros e información relacionada nido. Imagínese el número de combinaciones que lo tienes que hacer en SQL si tuviera ocho órdenes de anidación! Sin embargo, esta situación es más común de lo que se podría pensar.

Ahora, lo que si desea ejecutar informes, información sobre el extracto de que los datos financieros y conclusiones Deducir? En este caso, es necesario ejecutar consultas complejas, y SQL tiende a ser más rápido en este sentido.

Nota: las bases de datos SQL , particularmente PostgreSQL, también se han dado a conocer una característica que permite que los datos consultable JSON que se insertan como parte de un registro. Si bien esto puede combinar lo mejor de ambos mundos, la velocidad puede ser motivo de preocupación. de

Es más rápido a los datos no estructurados de consulta de una base de datos NoSQL de lo que es la consulta campos JSON de una columna de tipo JSON en PostgreSQL. Siempre se puede hacer una prueba de comparación de velocidad para una respuesta definitiva.

Sin embargo, esta característica podría reducir la necesidad de una base de datos adicional. A veces, los objetos serializados en vinagre o se almacenan en los registros en forma de tipos binarios, y luego serializados-DE, el de lectura.

La velocidad no es la única métrica, sin embargo. Usted también querrá tener en cuenta cosas como las transacciones, atomicidad, durabilidad y capacidad de ampliación. Transacciones son importantes en aplicaciones financieras, y tales características tienen prioridad.

ya que hay una amplia gama de bases de datos, cada uno con sus propias características, es el trabajo del ingeniero de datos para tomar una decisión informada sobre qué base de datos a utilizar en cada aplicación. Para obtener más información, puede leer sobre las propiedades ACID relacionados con transacciones de bases de datos.

También es posible que se le pregunte qué otras bases de datos que conocemos en su entrevista ingeniero de datos. Hay varias otras bases de datos relevantes que son utilizados por muchas empresas:

  • elástico de búsqueda es muy eficaz en la búsqueda de texto. Se aprovecha su base de datos basada en documentos para crear una poderosa herramienta de búsqueda.
  • Newt DB combina ZODB y el PostgreSQL JSONB función para crear una base de datos NoSQL Python ambiente.
  • InfluxDB se utiliza en aplicaciones de series de tiempo a eventos en las tiendas.

La lista es interminable, pero esto ilustra cómo una amplia variedad de bases de datos disponibles se adaptan a todo su nicho de mercado.

Las preguntas sobre las bases de datos de la caché

caché de bases de datos de retención de datos de acceso frecuente. Ellos viven al lado de las principales bases de datos SQL y NoSQL. Su objetivo es aliviar la carga y atender las solicitudes más rápido.

Un ejemplo Redis

que ha cubierto las bases de datos SQL y NoSQL para soluciones de almacenamiento a largo plazo, pero ¿qué pasa más rápido, almacenamiento más inmediato? ¿Cómo puede un cambio ingeniero de datos de cómo rápidamente los datos se recupera de una base de datos?

aplicaciones web típicas recuperar datos comúnmente usados, al igual que el perfil o el nombre de un usuario, muy a menudo. Si todos los datos están contenidos en una base de datos, entonces el número de golpea el servidor de base de datos se va a estar en la parte superior e innecesario. Como tal, se necesita una solución de almacenamiento más rápido, más inmediato.

Si bien esto reduce la carga del servidor, sino que también crea dos dolores de cabeza para el ingeniero de datos, equipo de back-end, y el equipo de DevOps. En primer lugar, ahora tendrá alguna base de datos que tiene un tiempo más rápido de lectura de su SQL principal o la base de datos NoSQL. Sin embargo, el contenido de ambas bases de datos deben coincidir con el tiempo. (Bienvenido al problema de la consistencia del estado entre bases de datos! Disfrute.)

La segunda es que el dolor de cabeza DevOps ahora tiene que preocuparse de escalabilidad, redundancia, y así sucesivamente para la nueva base de datos de caché. En la siguiente sección, se le sumerge en temas como estos con la ayuda de Redis.

Q7: cómo utilizar bases de datos de la caché

Es posible que haya recibido suficiente información de la introducción de responder a esta pregunta! Una base de datos de caché es una solución de almacenamiento rápida se utiliza para almacenar los datos de corta duración, estructurados o no estructurados. Se puede dividir y escala de acuerdo a sus necesidades, pero es típicamente mucho menor en tamaño que la base de datos principal. Debido a esto, su base de datos de caché puede residir en la memoria, lo que le permite pasar por alto la necesidad de leer desde un disco.

Nota: diccionarios Si alguna vez has usado en Python, a continuación, Redis sigue la misma estructura. Es una tienda de clave-valor, donde se puede establecer y obtener datos al igual que un diccionario de Python.

Cuando llega una petición, primero comprueba la base de datos de la memoria caché, a continuación, la base de datos principal. De esta manera, se puede evitar que cualquier solicitudes innecesarias y repetitivas de alcanzar el servidor de la base de datos principal. Desde una base de datos de caché tiene un tiempo de lectura más baja, también se beneficiarán de un aumento de rendimiento!

Puede utilizar PIP para instalar la biblioteca necesaria:

$ pip install redis

Ahora, considere una solicitud para obtener el nombre del usuario desde su Identificación:

import redis
from datetime import timedelta

# In a real web application, configuration is obtained from settings or utils
r = redis.Redis()

# Assume this is a getter handling a request
def get_name(request, *args, **kwargs):
id = request.get('id')
if id in r:
return r.get(id) # Assume that we have an {id: name} store
else:
# Get data from the main DB here, assume we already did it
name = 'Bob'
# Set the value in the cache database, with an expiration time
r.setex(id, timedelta(minutes=60), value=name)
return name

Este código comprueba si el nombre está en Redis utilizando la clave de identificación. Si no es así, entonces el nombre se establece con una fecha de caducidad, que se utiliza porque es de corta duración, la memoria caché.

Ahora, lo que si su entrevistador le pregunta qué le pasa a este código? Su respuesta debe ser que no hay control de excepciones! Las bases de datos pueden tener muchos problemas, como la caída de las conexiones, por lo que es siempre una buena idea para tratar de atrapar esas excepciones.

Las preguntas sobre patrones de diseño y conceptos ETL

En aplicaciones de gran tamaño, a menudo se utilizan más de un tipo de base de datos. De hecho, es posible usar PostgreSQL, MongoDB, y Redis todo dentro de una sola aplicación! Un problema difícil es tratar con los cambios de estado entre bases de datos, lo que expone a los desarrolladores a problemas de coherencia. Considere el siguiente escenario:

Ahora, usted se tiene un resultado incoherente y anticuado! Los resultados devueltos desde la segunda base de datos no reflejarán el valor actualizado de la primera. Esto puede suceder con cualquier par de bases de datos, pero es especialmente común cuando la base de datos principal es una base de datos NoSQL, y la información se transforma en SQL para fines de consulta.

bases de datos pueden tener los trabajadores de fondo para hacer frente a este tipo de problemas. Estos trabajadores extraer datos de una base de datos , transforman de alguna manera, y la carga en la base de datos de destino. Cuando va a convertir de una base de datos NoSQL a un SQL uno, el extracto, transformar , proceso de carga (ETL) realiza los siguientes pasos:

Este flujo de trabajo es bastante común en los mercados financieros, juegos y aplicaciones de información. En estos casos, el esquema en constante cambio requiere una base de datos NoSQL, pero la presentación de informes, análisis y agregaciones requiere una base de datos SQL.

P8: ETL Desafíos

Hay varios conceptos desafiantes en ETL, incluyendo las siguientes: problemas

  • grandes volúmenes de datos con estado
  • trabajadores
  • asincrónicos
  • Tipo-emparejan

La lista es interminable! Sin embargo, dado que los pasos en el proceso de ETL están bien definidos y lógica, los ingenieros de datos back-end y normalmente se preocupan más sobre el rendimiento y la disponibilidad en lugar de aplicación.

Si la aplicación está escribiendo miles de registros por segundo a MongoDB, a continuación, sus necesidades de los trabajadores de ETL para mantenerse al día con la transformación, la carga y la entrega de los datos al usuario en la forma solicitada. La velocidad y la latencia puede ser un problema, por lo que estos trabajadores son típicamente escritos en lenguajes rápidas. Puede utilizar el código compilado para la transformación paso para acelerar las cosas, ya que esta parte es por lo general vinculado a la CPU.

Nota: multi-procesamiento y separación de los trabajadores son otras soluciones que es posible que desee considerar.

Si usted está tratando con una gran cantidad de funciones intensivas de la CPU, entonces puede que desee comprobar hacia fuera Numba. Esta biblioteca compila funciones para hacerlos más rápido en su ejecución. Lo mejor de todo, esto es fácil de implementar en Python, aunque hay algunas limitaciones en lo que las funciones se pueden utilizar en estas funciones compiladas.

P9: patrones de diseño en grandes volúmenes de datos

Imagínese necesidades del Amazonas para crear un sistema de recomendación sugerir productos adecuados a los usuarios. El equipo científico de datos necesita los datos y mucha de ella! Van a usted, el ingeniero de datos, y le piden que crear un almacén de base de datos provisional separada. Ahí es donde van a limpiar y transformar los datos.

Usted puede ser sorprendido al recibir una solicitud de este tipo. Cuando se tiene terabytes de datos, necesitará varios equipos para controlar toda esa información. Una función de agregación de base de datos puede ser una operación muy compleja. ¿Cómo puede usted consulta, agregar y hacer uso de datos relativamente grandes de una manera eficiente?

Apache había introducido inicialmente MapReduce, que sigue el mapa , shuffle, reducir el flujo de trabajo . La idea es asignar diferentes datos sobre máquinas separadas, también llamados clusters. A continuación, se puede realizar el trabajo sobre los datos, agrupados por una clave, y por último, agregar los datos en la etapa final.

Este flujo de trabajo se sigue utilizando hoy en día, pero ha estado disminuyendo recientemente en favor de la chispa. El patrón de diseño, sin embargo, constituye la base de la mayoría de los flujos de trabajo de datos grandes y es un concepto muy intrigante. Puede leer más sobre MapReduce en IBM Analytics.

P10: Aspectos comunes del proceso de ETL y de datos grandes flujos de trabajo

Usted podría pensar que esto una pregunta bastante extraño, pero es simplemente una comprobación de sus conocimientos de informática, así como su conocimiento del diseño general y la experiencia.

Ambos flujos de trabajo siguen el patrón productor-consumidor . Un trabajador (el productor) produce datos de algún tipo y da salida a una tubería. Esta tubería puede tomar muchas formas, incluyendo mensajes de la red y los factores desencadenantes. Después de que el Productor salida a los datos, que consume el consumidor y hace uso de ella. Estos trabajadores suelen trabajar de forma asíncrona y se ejecutan en procesos separados.

Puede comparar el productor al extracto y transformar pasos del proceso de ETL. Del mismo modo, en grandes volúmenes de datos, el asignador puede ser visto como el productor, mientras que el reductor es efectivamente el Consumidor. Esta separación de las preocupaciones es extremadamente importante y eficaz en el diseño y la arquitectura de desarrollo de aplicaciones.

Conclusión Felicidades

! Que ha cubierto mucho terreno y respondió a varias preguntas de la entrevista ingeniero de datos. Ahora entiendo un poco más acerca de los muchos sombreros diferentes ingeniero de datos se puede usar, así como cuáles son sus responsabilidades con respecto a las bases de datos, diseño y flujo de trabajo.

Armado con este conocimiento, ahora puede:

  • uso de Python con SQL, NoSQL, y bases de datos de caché
  • uso de Python en aplicaciones ETL y de consulta de los proyectos del Plan
  • antes de tiempo, manteniendo el diseño y flujo de trabajo en mente

    Mientras

preguntas de la entrevista pueden ser variadas, que ha estado expuesto a múltiples temas y han aprendido a pensar fuera de la caja en muchas áreas diferentes de la informática. Ahora ya está listo para tener una entrevista increíble!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *