Если таблица имеет шесть столбцов, и все они доступны для поиска, я должен индексировать их все или ни один из них
blockquote>. Вы ищете по полю по полю или некоторые поиски с использованием нескольких полей? Какие поля находятся в в большинстве ? Каковы типы полей? (Индекс лучше работает на INT, чем на VARCHAR, например) Пробовали ли вы использовать EXPLAIN для выполняемых запросов?
Каковы влияющие на индексирование результаты индексирования
blockquote >UPDATE и INSERT будут медленнее.
Если у меня есть столбец VARCHAR 2500, который можно найти на сайтах моего сайта, я должен индексировать его
strong> / blockquote>Нет, если это не UNIQUE (это означает, что оно уже проиндексировано), или вы только выполняете поиск точных совпадений в этом поле (не используя полнотекстовый поиск LIKE или mySQL).
< blockquote>Как правило, я помещаю индекс в любые поля, которые я буду искать или выбирать с помощью предложения WHERE
blockquote>. Я бы обычно индексировал поля, которые наиболее опрошены, а затем INTs / BOOLEANs / ENUM скорее поля, которые являются VARCHARS. Не забывайте, часто вам нужно создать индекс в комбинированных полях, а не индекс в отдельном поле. Используйте EXPLAIN и проверьте медленный журнал.
Я работал над rust-http , который имеет стать де-факто HTTP-библиотекой для Rust (Servo использует ее); это далеко не полный и очень плохо документированный в настоящее время. Вот пример выполнения запроса и выполнения чего-то со статусом:
extern mod http;
use http::client::RequestWriter;
use http::method::Get;
use http::status;
use std::os;
fn main() {
let request = RequestWriter::new(Get, FromStr::from_str(os::args()[1]).unwrap());
let response = match request.read_response() {
Ok(response) => response,
Err(_request) => unreachable!(), // Uncaught condition will have failed first
};
if response.status == status::Ok {
println!("Oh goodie, I got me a 200 OK response!");
} else {
println!("That URL ain't returning 200 OK, it returned {} instead", response.status);
}
}
Запустите этот код с URL-адресом в качестве единственного аргумента командной строки, и он проверит код состояния! [HTTP], нет HTTPS.)
Сравните с src/examples/client/client.rs
для примера, который делает немного больше.
rust-http отслеживает основную ветвь ржавчины. В настоящее время он будет работать в только что выпущенном Rust 0.8, но, скорее всего, скоро будут изменения. На самом деле, никакая версия ржавчины-http не работает на Rust 0.8 - произошли изменения, которые не могут быть обработаны в правилах конфиденциальности непосредственно перед выпуском, оставляя что-то, что ржавчина-http зависит от дополнительного :: url недоступного , С тех пор оно было исправлено, но оно не совместимо с ржавчиной. Rust 0.8.
Что касается вопроса о кодировке строки запроса, в настоящее время это должно быть сделано с помощью extra::url::Query
(typedef для ~[(~str, ~str)]
). Соответствующие функции для конверсий:
extra::url::query_to_str
extra::url::query_from_str
(извините, не могу использовать это просто на данный момент, поскольку он является частным. PR, чтобы сделать его общедоступным. В то же время эта ссылка на самом деле не должна работать, она доступна только из-за https://github.com/mozilla/rust/issues /7476.) Использование привязок. Вставьте это в свой Cargo.toml
:
[dependencies.curl]
git = "https://github.com/carllerche/curl-rust"
... и это в src/main.rs
:
extern crate curl;
use curl::http;
fn main(){
let resp = http::handle()
.post("http://localhost:3000/login", "username=dude&password=sikrit")
.exec().unwrap();
println!("code={}; headers={}; body={}",
resp.get_code(), resp.get_headers(), resp.get_body());
}
Самый простой способ сделать HTTP в Rust - reqwest . Hyper - популярная HTTP-библиотека для Rust и использует две библиотеки: Tokio , чтобы сделать неблокирующие запросы и фьючерсы-rs для фьючерсов / обещаний. Пример Hyper приведен ниже и во многом вдохновлен примером в его документации . В Для потомков я оставил свой первоначальный ответ ниже, но см. выше для обновления для Rust 1.19 (последняя стабильная версия на момент написания этой статьи). Я верю, что вы поиск находится в стандартной библиотеке . теперь в rust-http и ответ Криса Моргана является стандартным способом в текущем Rust в обозримом будущем. Я не уверен, как далеко я могу вас принять (и надеюсь, что я не поймаю вас в неправильном направлении!), Но вам нужно что-то вроде: // Rust 1.19, Hyper 0.11, tokio-core 0.1, futures 0.1
extern crate futures;
extern crate hyper;
extern crate tokio_core;
use futures::{Future};
use hyper::{Client, Uri};
use tokio_core::reactor::Core;
fn main() {
// Core is the Tokio event loop used for making a non-blocking request
let mut core = Core::new().unwrap();
let client = Client::new(&core.handle());
let url : Uri = "http://httpbin.org/response-headers?foo=bar".parse().unwrap();
assert_eq!(url.query(), Some("foo=bar"));
let request = client.get(url)
.map(|res| {
assert_eq!(res.status(), hyper::Ok);
});
// request is a Future, futures are lazy, so must explicitly run
core.run(request).unwrap();
}
Cargo.toml
: [dependencies]
hyper = "0.11"
tokio-core = "0.1"
futures = "0.1"
Что касается кодирования, есть несколько примеров в модульных тестах в SRC / libstd / net_url.rs. // Rust 0.6 -- old code
/*
extern mod std;
use std::net_ip;
use std::uv;
fn main() {
let iotask = uv::global_loop::get();
let result = net_ip::get_addr("www.duckduckgo.com", &iotask);
io::println(fmt!("%?", result));
}
*/