Python
SQL в Python.Для работы с 125 тыс языковых пар.
Есть программа на Python которая работает с 125 тыс языковых пар, которые хранятся в файлах формата txt . Есть необходимость создать базу данных с помощью SQL с которой сверялись бы текстовые файлы. Это необходимо для пополнения текстовых файлов, находящихся на других Персональных компьютерах.
создаете таблицу DICTIONARY
с колонками original (primary key) | translation
и вперед INSERT INTO DICTIONARY (pair[0], pair[1]) для каждой пары в файлах
с колонками original (primary key) | translation
и вперед INSERT INTO DICTIONARY (pair[0], pair[1]) для каждой пары в файлах
В дополнение к предыдущему ответу - а обязательно через БД? Словарь на 125 тысяч по современным меркам - плюнуть и растереть. В любом случае, БД будет просто в силу вечной пересылки и конвертации данных туда-сюда работать медленнее...
Поясню.
Ты хочешь сделать общий репозиторий в виде БД и использовать его для синхронизации всех компов, так? А КАК ИМЕННО ты собрался это делать? 125к запросов на вхождение элементов от каждого клиента? Да ты задолбаешь свой сервер этими запросами. Плюс коллизии транзакций могут возникнуть запросто.
Если что-то такое и делать, то нужно писать хранимку, которая будет получать файлы целиком и возвращать новые же файлы. Во многих СУБД хранимки компилируются, поэтому будут работать быстро относительно соотв. количества запросов.
Ну а если совсем по-уму, то надо писать что-то самописное клиент-серверное.
Поясню.
Ты хочешь сделать общий репозиторий в виде БД и использовать его для синхронизации всех компов, так? А КАК ИМЕННО ты собрался это делать? 125к запросов на вхождение элементов от каждого клиента? Да ты задолбаешь свой сервер этими запросами. Плюс коллизии транзакций могут возникнуть запросто.
Если что-то такое и делать, то нужно писать хранимку, которая будет получать файлы целиком и возвращать новые же файлы. Во многих СУБД хранимки компилируются, поэтому будут работать быстро относительно соотв. количества запросов.
Ну а если совсем по-уму, то надо писать что-то самописное клиент-серверное.
Программирование – это наука формальна, поэтому подойдем к задаче с формально математической точки зрения.
1)Есть программа на Питоне, которая работает со своей БД (в формате TXT) и в этой базе два поля "original" и "translation"
2)Есть некоторый SQL сервер, в котором хранится таблица, содержащая два поля "original" и "translation"
3)Первым делом сервер должен решить, а нет ли в словаре клиента новшеств или проблем. Полный список новшеств и проблем можно получить одним запросом, например таким:
select distinct C."original", C."translation" from
"temp"."client" as C
,"temp"."server" as S
where
(C."original" = S."original" and C."translation" != S."translation")
or
C."original" not in (
select "original" from "temp"."server"
);
Вопросы эффективности и скорострельности запроса можно пока не рассматривать. Важно, что это запрос дает ответ на главный вопрос: с клиентом есть непонимание по определенному набору слов "original". Решением этой коллизии должна заниматься другая SQL-процедура, которая проверяет слово новое или дают новый перевод уже известного слова.
4)Пункт 3 серверной программы считаем выполненным. Что в этом случае должен ответить сервер? С учетом ваших пожеланий, мы отправляем вам новый txt файл.
5)При этом сервер должен принять решение по поводу того, а не устарела ли у клиента его локальная база данных? Может быть ее пора обновлять? Это еще одна SQL-процедура, которая может появиться в этой задаче.
PS/ Сколько у вас тысяч слов в словаре - вопрос вторчный, когда речь идет о сервере.
1)Есть программа на Питоне, которая работает со своей БД (в формате TXT) и в этой базе два поля "original" и "translation"
2)Есть некоторый SQL сервер, в котором хранится таблица, содержащая два поля "original" и "translation"
3)Первым делом сервер должен решить, а нет ли в словаре клиента новшеств или проблем. Полный список новшеств и проблем можно получить одним запросом, например таким:
select distinct C."original", C."translation" from
"temp"."client" as C
,"temp"."server" as S
where
(C."original" = S."original" and C."translation" != S."translation")
or
C."original" not in (
select "original" from "temp"."server"
);
Вопросы эффективности и скорострельности запроса можно пока не рассматривать. Важно, что это запрос дает ответ на главный вопрос: с клиентом есть непонимание по определенному набору слов "original". Решением этой коллизии должна заниматься другая SQL-процедура, которая проверяет слово новое или дают новый перевод уже известного слова.
4)Пункт 3 серверной программы считаем выполненным. Что в этом случае должен ответить сервер? С учетом ваших пожеланий, мы отправляем вам новый txt файл.
5)При этом сервер должен принять решение по поводу того, а не устарела ли у клиента его локальная база данных? Может быть ее пора обновлять? Это еще одна SQL-процедура, которая может появиться в этой задаче.
PS/ Сколько у вас тысяч слов в словаре - вопрос вторчный, когда речь идет о сервере.
Не совсем понятно зачем это надо, если у пользовательских машин всегда есть доступ в интернет, то проще запилить API и поставить клиента каждому, это будет логичнее и надежнее, чем танцевать с бубном вокруг текстовых файлов
Сергей Соловей
https://yadi.sk/d/UeV_csIo3ab98G
Можете скачать и посмотреть у меня есть режим работы с API.Но мне надо увеличивать объём словаря программы.
Можете скачать и посмотреть у меня есть режим работы с API.Но мне надо увеличивать объём словаря программы.
Михаил Тарандушко
Ты наверное время тоже ходишь в интернет смотреть? Наверное и не слышал, что иногда потребности возникают делать чтото локально... Московский мажор одним словом)
Михаил Тарандушко
"проще запилить API и поставить клиента каждому" - клоун скинь разработку "проще") я посмотрю сколько у тебя времени уйдет Питоне чтобы такое написать
Хакер не доделанный, ты что брутфорс пишешь?
Жанибек Шарбактаев
https://yadi.sk/d/UeV_csIo3ab98G говорю можешь скачать и посмотреть.
Похожие вопросы
- Если кто использует Python на работе, в связке c C#,Java или C++, скажите, зачем ?
- Пожалуйста, помогите решить задачу на Python. Упражнение 124, 125, 146
- Дан список чисел. Нужно посчитать количество их "пар" (т.е. "1 1 1 1 1" = 10, "1 2 3 2 3" = 2 и т.д.) (Python)
- Окончил курсы на степике по Python что делать дальше?
- Python программирование. Помогите написать программу.
- Нейронные сети на Python 3.4
- Кто такой Python-разработчик? Т.е зная один Python можно устроиться на работу?
- Помогите, как сделать авторизацию в программе на python?
- Что писать на Python?
- Есть ли смысл изучать python
Значить запросы будут на добавления строки по 1 слову, а извлечение по строк 10(приблизительно) пользователей же будет совсем немного (не больше 100).
то есть если в текстовом файле всего 125000 слов, а в таблице 125100 то мы должны сделать всего 100 запросов, предварительно узнав сколько элементов в текстовом файле и в таблице и какая между ними разница.