Sly32

Рейтинг
405
Регистрация
29.03.2012
Должность
Software engineer

Не могу остановиться, так заинтересовался этой темой. По итогу написал себе скрипт, который делает поиск по файлу значений. Конечно все условно, поставил следующие лимиты. Адрес - 5-ти значное число. Храниться в 

в файле значения неотсортированы. Пример скрипта на пайтона -

import os
import random
import time
from functools import wraps


def timer(func):
    """ Return calc time of execution wrapped function"""
    @wraps(func)
    def wrapper(self, *args, **kwargs):
        start = time.time()
        result = func(self, *args, **kwargs)
        print(f"Execution time: {time.time() - start}")
        return result
    return wrapper


class SimpleFinder:

    def __init__(self):
        pass

    def add_ip(self):
        name = random.randint(40000, 49999)
        # name = 49342
        print(f"Function started. got Ip: {name}")
        file_name = self.get_filename(name)
        if self._if_exist(file_name):
            # print(f"File {file_name} exists")
            self.add_butch(file_name, name)
        else:
            # print(f"File {file_name} does not exists")
            self.create_butch(file_name, name)
    
    def get_filename(self, name):
        first_name = str(int(name / 10000))
        return "".join((first_name, "0000"))
    
    def _if_exist(self, filename):
        files_list = (os.listdir("file_finder/storage"))
        if filename in files_list:
            return True
        return False
    
    def create_butch(self, file_name, name):
        with open(f"file_finder/storage/{file_name}", "w+") as f:
            f.write(str(name))
            f.write(" ")

    def add_butch(self, file_name, name):
        with open(f"file_finder/storage/{file_name}", "a+") as f:
            f.write(str(name))
            f.write(" ")

    @timer
    def find_ip(self, name):
        filename = self.get_filename(name)
        if filename:
            print(f"Found file {filename} for checking ip {name}")
            with open(f"file_finder/storage/{filename}") as f:
                data_ip = f.read()
                if data_ip:
                    ip_list = data_ip.split(' ')
                    print(f"Count of records: {len(ip_list)}")
                    if str(name) in ip_list:
                        print(f"This ip({name}) was blocked for download")
                        return
        print(f"This ip({name}) can be download!!!")


if __name__ == "__main__":

    # res = SimpleFinder()
    # res.add_ip()
    print(timer.__doc__)
    print("="*120)
    print("Start script")
    # for i in range(100000):
    #     res = SimpleFinder()
    #     res.add_ip()
    # SimpleFinder().add_ip()
    res = SimpleFinder().find_ip(49342)

Результат выполнения для поиска по файлу с примерно полмиллиона записей:

Start script
Found file 40000 for checking ip 49342
Count of records: 433209
This ip(49342) was blocked for download
Execution time: 0.04430103302001953

Это локально, без всяких HTTP запросов, на 4-х ядерном core i5 10gen 16RAM
Мне кажется, сопоставимо со скоростью запроса в БД. Может и имеет место быть такой подход

Понятно, что тема древняя, но все же: Нужно разделять задачи. Если отдельно вывести ПДФку - никаких проблем, все браузеры это поддерживают на сегодня. Если в составе  ХТМЛ страницы - то нет. Но есть вариант - преобразовать в png. Для этого хватает библиотек и работает очень быстро. Мы на их основе писали сервис для создания пдф документов на сайте.
Последняя поездка в Рим в ноябре была просто великолепна, Италия то место куда хочется вернуться. Но вот следующего отдыха прямо жаркие споры и я предложил компромисс. - круиз по средиземному морю на недельку. Давняя мечта. Кто бывал в таком - поделитесь плиз впечатлениями, советами. Пока смотрю маршрут типа выход из Испании, Гибралтар, Сардиния и конечный пункт - Рим а оттуда на самолете домой. 
NoMoreContent #:

Представьте медиапродюсера среднего уровня, которому нужна система с данными по YouTube. Гигабайтов на 200. Он хочет периодически смотреть там статистику, аналитику, прогнозы, тренды и что-то еще по своим интересам.

Что он хочет получить - три сервера с приложением (бэкенд/фронтенд), БД, slave-БД?
Срок изготовления - полгода. Стоимость условно USD 85.990 и еще USD 15.000 на поддержку в будущем. 
Где он ничего не сможет сделать сам, кроме пользования интерфейсом.

Даже стало интересно выкатит POC по такой задаче и оценить. Мы живем, все-таки в разных мирах разработки, расскажу, как бы это делал я. Начнем с того, что медиапродюсер и не должен уметь что-либо кроме как нажимать кнопки. Для него одинаковая магия что БД что архивация файлов, поэтому  в этом случае я:

Хранение данных - Однозначно PostgreSQL.  Она соответствует принципам ACID, но позволяет гибко к ним относиться, в частности I-solation доктрина - я  могу отступить и позволить чтение  данных во время записи. Но в данном случае это неважно. Для надежности - настраивается репликация, которая и бэкап и масштабирование одновременно.

Бэкенд - скорее всего это будет FastApi приложение, полностью RESTful, что бы не было в дальнейшем проблем с расширением. Ну и конечно же помним про принципы SOLID -  именно для этого. 

На фронте  -  скорее всего React, хотя на старте можно прикрутить шаблонизатор Jinja2 прямо в FastApi и не заморачиваться особо, 

Что мы получим:

Простое АПИ, легко масштабируемое. Мне не нужно заморачиваться с созданием файловой системы и ее целостностью. Изначально делаю дизайн базы данных. Любое изменение обеспечено миграциями, я люблю Alembic, но тут кому что, хоть руками пиши. Заходел заказчик добавить какую-то инфу в базу или новую выборку - никаких проблем.

Теперь переходим к главному пункту споров - как это все легко будет разворачиваться и поддерживаться? 

Я Все ваши эти ваши VPS/VDS считаю пережитком прошлого. Облака - наше все. В моем случае это будет Амазон, конечно же. собрать инфраструктуру - ну наверное полдня с нуля, а потом все это добавляется в terraform и не нужно быть девопсом высокгого класса, чтоб это развернуть. Достаточно получить креды и стартануть локально скрипт башевский - инструкция на страницу! 

А при желании разобраться - что проще чем читать YML- файл? Это всяко легче чем выолнять линуксовые команды. Вот пример кода, который поднимет базу, уверен что даже тот кто это счас прочитает впервые, поймет что там происходит.

resource "aws_db_instance" "fastapi-db" {
  allocated_storage    = 5
  storage_type         = "gp2"
  instance_class       = "db.t3.micro"
  identifier           = "fastapi-db"
  engine               = "postgres"
  engine_version       = "14"
  parameter_group_name = "default.postgres14"

  username = var.db_username
  password = var.db_password
  db_name = "postgres"

  vpc_security_group_ids = [aws_security_group.sg-postgres.id]
  publicly_accessible    = true # Only for testing!
  skip_final_snapshot    = true
}

Никаких пошаговых инструкций не будет, кроме как получить креды. Все разворачивание полностью  автоматическое. Репозиторий из гитхаба и CI/CD.

Все это собрать будет однозначно быстрее для меня возни с файловой системой.  По цене - точно не дороже. 

Если бы не намечающаяся на сегодня пьянка с друзьями - к понедельнику бы выкатил бы POC, через неделю MVP.

Даже интересно стало - за сколько бы я такое реализовал.

Так что не вижу никаких преимуществ ни по одному из пунктов решения с файловой системой. Особенно на миллионах записей

Александр #:

Если будет возможность хотя бы просто повариться в их котле, хоть на пол шишечки - обязательно стоит. Дядьки серьезные и планы у них - нагнуть Мир ;)

Ну зачем бы им его нагибать, когда он и так им с потрохами принадлежит?))) моя давняя мечта - Гугл и рядом не стоит с ними. 

Александр #:

Разгон идет последний год, а после того, как впервые было заявление о том, что Блэкрок зайдет в крипту (не недавний заход, а заявление), инфляция резко пошла вверх. В общем-то, им выгоден сейчас дешевый бакс.
Всегда перед кризисом Блэкрок наращивает капитал там, куда он будет переводиться всеми в сам кризис, а то, что кризис на пороге, сомнений нет.

P.S.: в Китае сейчас жесть будет, лопнет пузырь жилищный, в РФ кабзда после девальвации рубля и двойного подъема ставки - производство все в заднице.
Будет весело :D

Понятно. Согласен в принципе с оценкой. Надо походу идти к ним работать) В смысле в эти все фонды. Я в Вангард прошел три этапа собесов, а потом предложили более интересную позицию со стеклм мне интересным и не пошел дальше. Может и зря

Александр #:
Интересно другое, что на фоне того, как "громко" заходит BlackRock в крипту, инфляция в США разгоняться стала еще быстрее

ты за 2 дня увидел оезкий разгон инфляции в США???

Александр #:

Вот уж не знаю, BlackRock заходит в крипту, остальных задавят.

Интересно что после этого биткоин прям хорого упал. А Вангард кстати отказался 

alexx10 #:

По данным западных финансистов, реальный курс доллара сейчас на уровне 70 рублей. Российские власти специально держат низким рубль, чтобы наполнять бюджет. А вообще, все эти курсы взяты с потолка. 

не слышал о таких данных. Более того, если завтра отменить бюджетное правило - курс улетит далеко за 150. Не встречал такой аналитики ни у блэкрока ни у вангарда. Пруфы  будут?

ArbNet #:

Завязывай смотреть украинские новости 😂

https://www.forbes.ru/finansy/504054-minfin-vpervye-s-avgusta-2023-goda-vernulsa-k-pokupke-valuty-po-budzetnomu-pravilu

Справишься прочитать сам?

Всего: 8668