Изучение программирования в детстве без подключения к Интернету; вы вынуждены все изобретать с нуля. У меня много историй об этом, но я все время возвращаюсь к тому, как я изобрел базы данных.

В 1999 году мне было около 12 лет, и я занимался программированием половину своей жизни. В основном игры и небольшие хаки. Теперь я был готов создать что-нибудь полезное. Что-то, что могло бы решить настоящую проблему и, надеюсь, принесло бы деньги. В то время я был одержим игровыми центрами LAN и увидел, что они отчаянно нуждаются в программном обеспечении для управления своими магазинами. Они отслеживали учетные записи пользователей с помощью ручки и бумаги. Когда кто-то платил за игру в течение определенного времени, менеджер магазина записывал это, а затем продолжал смотреть на часы и в свой блокнот, чтобы увидеть, не кончилось ли у кого-то время. По истечении времени они физически похлопывают их по плечу и просят выйти из системы. Я думал, что это идеальная проблема, ожидающая своего решения. Все уже использовали компьютеры, чтобы играть в игры, тогда почему бы не использовать один и тот же компьютер для управления всем этим?

Я разгадал большую часть головоломки. Это должна была быть архитектура клиент / сервер, и я знал, как создавать сетевые приложения с помощью WinSock (я использовал его в своих различных выходках в мир взлома удаленных компьютеров, о которых я расскажу в следующих статьях). Главное, чего не хватало, - это как, черт возьми, сохранить данные на диск и получить их при следующем запуске программы?

В то время я использовал Visual Basic 4, и, как можно понять по названию, это был инструмент разработки, ориентированный на графический интерфейс. Это либо не поддерживалось, либо было невероятно сложно написать код, не привязанный к элементу пользовательского интерфейса (в более поздних версиях это упростили). Все приложения, которые я создавал в прошлом, сохраняли все свое состояние и данные в пользовательском интерфейсе, и мне никогда не приходилось сохранять данные между запусками программы.

Итак, проблема состояла из двух частей:

  1. Как вы храните в своей программе данные, которые в настоящее время не используются на экране? (Также известен как данные в памяти)
  2. Как вы сохраняете и извлекаете данные между запусками программы?

По первой проблеме - я решил, что достаточно хорошим решением было пометить элементы пользовательского интерфейса, которые хранят данные, как скрытые. Фактически, если бы у меня были сотни или даже тысячи учетных записей пользователей, которые должны были жить в текстовых полях на экране, но помечены как скрытые (звучит ужасно, и это так, но, в мою защиту, это не сильно отличается от того, как сообщество веб-разработчиков - до тех пор, пока совсем недавно - хранил все свои данные в DOM).

Каждая строка представляла собой массив текстовых полей со следующей схемой именования: `accounts_ {номер строки} _ {имя поля}`. Итак, чтобы получить имя пользователя для первой строки: все, что мне нужно было сделать, это что-то вроде `Form1.accounts_1_username.text`. У меня также были всевозможные математические уловки, чтобы быстро получить информацию о моих данных. Например. Если бы я хотел получить количество строк, я бы посчитал текстовые поля, а затем разделил бы на количество полей.

Я также придумал концепцию индексов, чтобы ускорить поиск. Например, поиск записи пользователя по имени пользователя - одна из наиболее распространенных операций, поэтому она должна быть быстрой. Итак, у меня было гигантское текстовое поле, которое представляло собой разделенную запятыми строку `username: row_number`. Поэтому я бы использовал InStr, чтобы получить индекс имени пользователя, а затем получить номер строки для поиска всей записи.

Пришло время сохранить его и загрузить с диска. Это мне пришлось схитрить. Поскольку у меня был словарный запас для поиска этого, я пошел в интернет-кафе и посмотрел, как мне сохранить содержимое текстового поля в текстовый файл и как я могу снова загрузить его. Оказывается, это довольно распространенный вариант использования, и на этот счет есть масса примеров кода. Так что я назвал текстовые файлы точно по текстовым полям, а остальное было несложно. Проблема возникла, когда я тестировал и понял, что, когда я добираюсь до сотен строк, программа начинает загружаться за несколько минут. Так что я также изобрел ленивую загрузку. Я загружал большой кусок данных заранее, а затем использовал его, пока не попадал в случай, когда не мог найти запись. Затем я загружал еще один фрагмент и так далее, пока все мои данные не оказались в памяти (и под памятью я имел в виду «на экране»).

Этот хак разблокировал меня и позволил мне поработать над моим продуктом. Я построил клиентскую часть, которая общалась с сервером, чтобы сохранять данные от обратного отсчета времени в - кхм - текстовых полях. А также выяснил модель безопасности, касающуюся загрузки окон моего клиентского приложения и ничего больше. Но, к счастью, прежде чем я начал продавать свою программу, я натолкнулся на открытие, которое изменило мою жизнь: Microsoft Access. Это задержало доставку моего продукта на год, но в конце концов я отправил его в 2002 году и заработал много денег для 15-летнего ребенка.