Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
 Аватар для logincyberforu
30 / 31 / 0
Регистрация: 26.08.2013
Сообщений: 282

Базы данных, что за зверь

28.08.2013, 16:51. Показов 5447. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
И так вопрос в следуещем: как их исспользовать?
Примеры же естественно я видел, но они мало помогли так как бд в приложениях юзаю впервые, хватало фс.
Может кто объяснит в кратце что да как, то есть куда я подключаюсь, где непосредственно находится эта бд.
Желательно с синтаксисом mysql.
Или мб есть какие мануалы, или статьи...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.08.2013, 16:51
Ответы с готовыми решениями:

Иерархически источник данных - что за зверь!?
Компоненты типа menu при связи с источником данных требуют, чтобы он наследовал интерфейс (точно не помню как пишется, но примерно)...

Что за зверь С#?
Всем привет, всё время жил с VB 6.0. А тут предложили работу, а там нужен С#. 'Шо за ботва'? Если серьезно: поделитесь мнением,...

Что за зверь?
Всем привет, друзья ! ! ! Сегодня дружок принёс видеокарту. (где он её нарыл я не знаю :D) . Фотки видеокарты прилагаю. Меня...

33
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.09.2013, 17:24
Студворк — интернет-сервис помощи студентам
logincyberforu, помимо mysql, которая самая распространенная, есть куча других, с которыми php достаточно нормально работает - postgre, sqlite, например. Помимо того, PDO поддерживает множество различных СУБД http://www.php.net/manual/ru/pdo.drivers.php
0
 Аватар для logincyberforu
30 / 31 / 0
Регистрация: 26.08.2013
Сообщений: 282
03.09.2013, 17:28  [ТС]
KOPOJI, я поэтому и сказал "на сколько я знаю" что бы нубом не прослыть... но тема не в этом...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
03.09.2013, 17:34
Ну что же... Когда языки манипулирования данными, организованными не реляционным образом, достигнут мощи SQL (а число ошибок снизится до приемлемого уровня) - тогда посмотрим, что это за звери...

Добавлено через 5 минут
Заглянул в wiki (о Berkley DB). И что вижу:

"Oracle added support for SQL in 11g R2 release based on the popular SQLite API by including a version of SQLite in Berkeley DB" - как я понял, прикладным программистам можно не волноваться... SQL никуда не исчез
А как хранилище реализовано на физическом уровне - вопрос не столь важный.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.09.2013, 17:35
..это вы зря. NoSQL достаточно мощные. Попробуйте поиспользовать MongoDB или Redis, и сравните по быстродействию. Плюс к этому - отсутствие SQL-инъекций (собственно, оно и понятно, ведь это не SQL). Я бы дал ссылку на краткий обзор, но, к сожалению, это на другом форуме
Не знаю, как на винде, но на линухе установить монго не сложно (только долго, качает много). Впрочем, это все лишь мое мнение, не желаю спорить ни о чем, просто выразил мнение и удаляюсь..
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
03.09.2013, 21:03
KOPOJI, я верю, что работают эти СУБД быстро. Но для меня (и, вероятно, большинства) важнее, как реализовано манипулирование данными. Сила SQL в универсальности. Слабости тоже есть (те же SQL-инъекции).
Было бы крайне интересно как в неSQL-ных (т.е., как я понимаю, нереляционных БД) решаются простые типовые задачи. Как то (в скобках sql-аналоги):

1) создать объект; (create table)
2) наполнить его данными; (insert into ...)
3) извлечь данные и представить в виде отсортированной
совокупности данных; (Select *** from *** Order by ***)
4) сгруппировать при необходиости; (Select *** from *** having *** )
5) объединить несколько запросов (union)

и т.д.

Не удаляйтесь!..

Добавлено через 2 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
тротилу побольше
- как бы кое-кто не сделал стойку на ключевое слово...
0
03.09.2013, 21:10

Не по теме:

не-не, подпись была такой установлена в порыве раздражения :)
По теме БД - чуть позже отвечу

1
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
03.09.2013, 21:46
Цитата Сообщение от Catstail Посмотреть сообщение
как в неSQL-ных (т.е., как я понимаю, нереляционных БД) решаются простые типовые задачи
Не поручусь, насколько это там освещено, но несколько топиков по NoSQL (включая NoSQL-инъекции) есть на хабре. Вот здесь - обзорный: NoSQL базы данных: понимаем суть
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
03.09.2013, 21:51
gazlan, спасибо!
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.09.2013, 23:47
К сожалению, кого-кого, а бейсик совершенно не знаю.. Буду "говорить на своем", т.к. мне это будет наиболее удобно, а реализация на других языках, думаю, не настолько уж и сильно отличается..
Цитата Сообщение от Catstail Посмотреть сообщение
1) создать объект; (create table)
Проще некуда Просто указываем ее имя, и все. Если она уже существует - то будет использоваться существующая. Если ее еще нет - она создастся. Конечно, это и минус тоже - шанс незаметной, но плачевной очепятки увеличивается (правда, решается вынесением данных для подключения в отдельный конфиг)..
PHP
1
2
3
4
5
6
7
8
9
10
<?php
header('Content-type: text/html; charset=utf-8');
 
//Подключение
$connect = new MongoClient();
//или так(массив необязателен)
$connect = new MongoClient( 'mongodb://localhost:27017', array('connect' => TRUE) );
 
//создаем БД. Если она уже есть - то обращаемся к ней, если ее нет - она создастся
$db = $connect->newDB;
Цитата Сообщение от Catstail Посмотреть сообщение
2) наполнить его данными; (insert into ...)
Тоже ничего сложного
PHP
1
2
3
4
5
//создаем таблицу
$table = $db->newTable;
 
//вставляем данные
$table->insert( array('поле1'=>'значение1', 'поле2'=>'значение2', 'поле3'=>'значение3') );
Цитата Сообщение от Catstail Посмотреть сообщение
извлечь данные
Извлекаются данные также просто. Метод find(), если не указывать ничего, то возвращает ассоциативный двумерный массив всех записей (как с помощью fetchAll/ findAll() в других ЯП).
Посчитать записи еще проще:
PHP
1
echo $table->find(array('поле поиска'=>'значение')->count();
Но это если требуется указать данные для поиска. Если не требуется, то можно либо опустить массив в find, оставив пустым, либо, что еще проще - вместо find() использовать count() сразу А можно и в count() указать массив для поиска
Вот результат вывода всех значений из таблицы (которые я выше вставил)
PHP
1
2
3
foreach($table->find() as $row)
    foreach($row as $field=>$value)
        echo 'Значение поля "', $field, '" = "', $value, '"', PHP_EOL;
вложенный цикл здесь - только для того, чтобы вывести и название поля, а так, конечно же, куда проще с помощью $row['название поля'] ($row['поле1'] и т.д.)
Code
1
2
3
4
Значение поля "_id" = "522622a37c9f9490628b4567"
Значение поля "поле1" = "значение1"
Значение поля "поле2" = "значение2"
Значение поля "поле3" = "значение3"
Да, count выдает одну запись - массив вставленных значений - это только одна запись. Вот еще пара вставленных аналогично строк (вернее, их вывод)
PHP
1
2
3
4
5
6
7
$i = 0;
foreach($table->find() as $row)
{
    echo 'Запись №', ++$i, PHP_EOL;
    foreach($row as $field=>$value)
        echo 'Значение поля "', $field, '" = "', $value, '"', PHP_EOL;
}
На выходе уже такое
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Запись №1
Значение поля "_id" = "522622a37c9f9490628b4567"
Значение поля "поле1" = "значение1"
Значение поля "поле2" = "значение2"
Значение поля "поле3" = "значение3"
Запись №2
Значение поля "_id" = "5226248d7c9f9427638b4567"
Значение поля "поле1" = "значение1_2"
Значение поля "поле2" = "значение2_2"
Значение поля "поле3" = "значение3_2"
Запись №3
Значение поля "_id" = "522624957c9f9432638b4567"
Значение поля "поле1" = "значение1_3"
Значение поля "поле2" = "значение2_3"
Значение поля "поле3" = "значение3_3"
Но, как я уже говорил, в подобном удобстве (а это, несомненно удобнее, и быстрее, тесты, возможно, в конце предоставлю, простенькие), велик шанс ошибиться:
PHP
1
$table->insert( array('поле11'=>'значение1_4', 'поле22'=>'значение2_4', 'поле33'=>'значение3_4') );
БД не будет считать это ошибкой. И поэтому при том же самом коде вывода мы получим уже разные поля в запросе..
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Запись №1
Значение поля "_id" = "522622a37c9f9490628b4567"
Значение поля "поле1" = "значение1"
Значение поля "поле2" = "значение2"
Значение поля "поле3" = "значение3"
Запись №2
Значение поля "_id" = "5226248d7c9f9427638b4567"
Значение поля "поле1" = "значение1_2"
Значение поля "поле2" = "значение2_2"
Значение поля "поле3" = "значение3_2"
Запись №3
Значение поля "_id" = "522624957c9f9432638b4567"
Значение поля "поле1" = "значение1_3"
Значение поля "поле2" = "значение2_3"
Значение поля "поле3" = "значение3_3"
Запись №4
Значение поля "_id" = "522626617c9f948a638b4567"
Значение поля "поле11" = "значение1_4"
Значение поля "поле22" = "значение2_4"
Значение поля "поле33" = "значение3_4"
Конечно, это заставляет программиста быть куда более внимательным, нежели при работе с MySQL, например, т.к. никто не сообщит о том, существовало (именно в прошедшем времени, т.к. оно создастся) ли такое поле.. Возможно, это одна из причин, почему Mongo и им подобные не столь распространены.

Ну и поиск по полям, про который я уже говорил
PHP
1
2
3
4
5
6
foreach($table->find(array('поле22'=>'значение2_4')) as $row)
{
    echo 'Запись №', ++$i, PHP_EOL;
    foreach($row as $field=>$value)
        echo 'Значение поля "', $field, '" = "', $value, '"', PHP_EOL;
}
Code
1
2
3
4
5
Запись №1
Значение поля "_id" = "522626617c9f948a638b4567"
Значение поля "поле11" = "значение1_4"
Значение поля "поле22" = "значение2_4"
Значение поля "поле33" = "значение3_4"
Ну, если поле/значение не найдено, то ничего не получим, естественно. Вернее, получим объект MongoCursor, от которого мы уже можем узнать число записей с помощью count()
Думаю, по обычному извлечению данных уже достаточно.. Удалить таблицу тоже просто - drop().
Ах да, чуть не забыл Монго поддерживает вложенные записи
PHP
1
2
3
4
5
6
7
$table->drop();
$table->insert( array( 'field'=>array( 'subfield_1'=>array('subfield_2'=>'value') ) ) );
 
foreach($table->find() as $rows)
{
    print_r($rows);
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Array
(
    [_id] => MongoId Object
        (
            [$id] => 522629ab7c9f9444648b4567
        )
 
    [field] => Array
        (
            [subfield_1] => Array
                (
                    [subfield_2] => value
                )
 
        )
)
Еще по поводу запросов - лимит, его тоже довольно часто юзают.. Тоже все просто:
PHP
1
$table->find()->limit(число)
Или, если нужна лишь одна запись использовать findOne() вместо find().
По поводу сортировки. Тоже ничего сложного Просто добавляем sort() после find(), где указываем название поля и порядок сортировки. Отрицательное - по убыванию, остальные по возрастанию (хотя на офф сайте, как я потом посмотрел, написано именно 1 и -1).
PHP
1
2
$table->find()->sort( array('field1'=>1) ); //по возрастанию
$table->find()->sort( array('field1'=>-1) ); //по убыванию
Да, кстати, еще есть такая интересная вещь как skip(), которая отлично будет использоваться для постраничной навигации

PHP
1
2
3
4
5
6
foreach($table->find()->limit(3)->skip(3) as $row)
{
    echo 'Запись №', ++$i, PHP_EOL;
    foreach($row as $field=>$value)
        echo 'Значение поля "', $field, '" = "', $value, '"', PHP_EOL;
}
Пользоваться ей ну очень просто (проще, чем в том же мускуле). к примеру, так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function getPage($table, $page=1, $limit=10)
{
    $skip = --$page * $limit;
    $skip = $skip < 0 ? 0 : $skip;
    return $table->find()->limit($limit)->skip($skip);
}
 
$page = 1;
$limit = 3; //записей много лень добавлять, их там с десяток
 
foreach(getPage($table, $page, $limit) as $row)
{
    echo 'Запись №', ++$i, PHP_EOL;
    foreach($row as $field=>$value)
        echo 'Значение поля "', $field, '" = "', $value, '"', PHP_EOL;
}
 
echo PHP_EOL, PHP_EOL;
 
$page = 3; //к примеру, страница поменялась на третью
 
foreach(getPage($table, $page, $limit) as $row)
{
    echo 'Запись №', ++$i, PHP_EOL;
    foreach($row as $field=>$value)
        echo 'Значение поля "', $field, '" = "', $value, '"', PHP_EOL;
}
 
echo PHP_EOL, PHP_EOL;
 
$page = 5; //а затем на пятую
 
foreach(getPage($table, $page, $limit) as $row)
{
    echo 'Запись №', ++$i, PHP_EOL;
    foreach($row as $field=>$value)
        echo 'Значение поля "', $field, '" = "', $value, '"', PHP_EOL;
}
Да, в таблицу я тут до этого забил 15 значений вида zzzN, aaaN и fffN(по порядку)
Результат:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Запись №1
Значение поля "_id" = "522630027c9f944c668b4567"
Значение поля "field" = "zzz1"
Запись №2
Значение поля "_id" = "522630027c9f944c668b4568"
Значение поля "field" = "aaa2"
Запись №3
Значение поля "_id" = "522630027c9f944c668b4569"
Значение поля "field" = "fff3"
 
 
Запись №4
Значение поля "_id" = "522630107c9f9462668b4567"
Значение поля "field" = "zzz7"
Запись №5
Значение поля "_id" = "522630107c9f9462668b4568"
Значение поля "field" = "aaa8"
Запись №6
Значение поля "_id" = "522630107c9f9462668b4569"
Значение поля "field" = "fff9"
 
 
Запись №7
Значение поля "_id" = "522630257c9f9478668b4567"
Значение поля "field" = "zzz13"
Запись №8
Значение поля "_id" = "522630257c9f9478668b4568"
Значение поля "field" = "aaa14"
Запись №9
Значение поля "_id" = "522630257c9f9478668b4569"
Значение поля "field" = "fff15"
Цитата Сообщение от Catstail Посмотреть сообщение
сгруппировать при необходиости; (Select *** from *** having *** )
Не нашел я такого.. Может, оно и не надо? Если честно, за мою практику использовал having всего пару раз, от силы, и то, когда изучал
Цитата Сообщение от Catstail Посмотреть сообщение
объединить несколько запросов (union)
Такого тоже не нашел Правда, также считаю, что UNION, на ряду с HAVING - довольно редкая надобность.

Ну и что касается удаления/изменения - то все аналогично, remove/update для этого есть, синтаксис также простой.. Я не буду об этом говорить, при желании, все это можно найти в мануале ссылка на мануал с этим всем в конце сообщения

Думаю, можно подвести вывод.. MongoDB - отличная БД. Конечно, со своими нюансами, плюсами и минусами. К минусам можно отнести и отсутствие джойнов, как таковых, и кушание памяти.. И при сбое данные могут просто-напросто пропасть. Но и плюсов тоже не мало, как и в простоте синтаксиса, так и в динамике.

Не по теме:

И, если память не изменяет, гугл использует(по-крайней мере, использовал) Mongo или Redis, точно не помню уже



Официальная документация здесь, и по поводу других SQL-команд на монго и т.п. - http://docs.mongodb.org/manual... omparison/. Кстати, имхо, отличная

Добавлено через 2 минуты

Не по теме:

извиняюсь, что долго отвечал.. С того времени, как я ее пробовал, уже многое поменялось (в том числе и в php), то, что я использовал ранее - класс Mongo теперь не рекомендуется к использованию, да и позабылось почти все..

2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
04.09.2013, 09:45
Спасибо, все понятно. Мое мнение упрочилось: SQL мощнее и выразительнее.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
04.09.2013, 23:40
Да пошел ты, SQL! Как отказаться от SQL баз данных и выиграть
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
05.09.2013, 11:15
Я посмотрел статью "по диагонали"; в заключении автор пишет что-то вроде "несколькими простыми командами получается то, что в SQL делается уродливым запросом". Но в тексте я не увидел простых команд (с силой и прозрачностью SQL)...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
05.09.2013, 11:23
Catstail, я тоже предпочитаю SQL, просто решил поделиться статьей, на которую вчера совершенно случайно наткнулся
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
05.09.2013, 11:58
А за статью я Вас поблагодарил. И благодарю еще раз!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2013, 11:58
Помогаю со студенческими работами здесь

Что за зверь?
Котом оказался лишь по большому недоразумению. А вот кто это на самом деле? 0iXHim3ToQ4

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

Что за зверь такой?
Что за зверь такой? Выдрал на днях из старой материнки AT49F002NT почитал про него, понял что в него биос загружают и имеет он 2мб флэш. В...

BA3F 1Z что за зверь?
Ноут (Pacark Bell Q5WS8). Плата в коротоком. БП уходит в защиту при подключении. При подаче 3,5 v сильно греются эти (мосфеты?). Стоят на...

UNity3d - что за зверь?
Всем доброго времени суток. Я просто встал в ступор, и часы поиска информации в инете мне не поиогли, может здесь мне кто то поможет. Учил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru