В/usr/include,
Я пытался держать для глоссария GL и OpenGL.. .but не может найти его.
Где эти заголовочные файлы расположены?
Я не думаю, что это ужасная идея.
Рассмотрим сценарий подключения/месяц.
Учитывая, что длина записи составляет ~ 40 (это щедро) символов, и вы получаете ~ 8200 записей в месяц, окончательный размер документа будет составлять ~ 350K в конце месяца.
Это означает, что, идя полным ходом, вы будете читать и писать 2000 350K документов каждые 5 минут.
Количество операций ввода-вывода составляет менее 6 МБ/с с учетом операций чтения и записи, усредненных для 5-миллиметрового интервала времени. Это хорошо внутри даже низшего уровня оборудования сегодня.
Однако существует и другая проблема. Когда вы храните этот документ, диван будет оценивать его содержимое для построения своего представления, поэтому диван будет анализировать 350K документы. Я боюсь, что (наконец-то проверка, но это было некоторое время) я не верю, что диван хорошо масштабируется между ядрами CPU, так что это может легко закрепить одно ядро CPU, которое диван будет использовать. Я хотел бы надеяться, что диван умеет читать, анализировать и обрабатывать 2 МБ/с, но я откровенно не знаю. При всех преимуществах эрланг - не лучшая задница на прямом компьютерном языке.
Последняя проблема заключается в том, чтобы не отставать от базы данных. Это будет писать 700 МБ каждые 5 минут в конце месяца. С архитектурой Couchs (только добавление) вы будете записывать 700MB данных каждые 5 минут, что 8.1GB в час, а 201GB через 24 часа.
После сжатия БД он разрушается до 700MB (в течение одного месяца), но во время этого процесса этот файл становится большим и довольно быстро.
На стороне извлечения эти большие документы меня не пугают. Загружая 350K JSON документ, да это большое, но дело не в этом большой, не на современных аппаратных средствах. На досках объявлений есть аватары побольше. Итак, все, что вы хотите сделать в отношении активности соединения в течение месяца, будет довольно быстро, я думаю. Между соединениями, очевидно, чем больше вы захватите, тем дороже он будет получать (700MB для всех 2000 соединений). 700MB - это реальное число, которое оказывает реальное влияние. Кроме того, ваш процесс должен быть агрессивным в выбросе данных, которые вам не интересны, чтобы он мог выбросить бафф (если только вы не хотите загрузить 700MB кучу в процессе отчета).
Учитывая эти цифры, Connection/Day может быть лучшей ставкой, так как вы можете контролировать гранулярность немного лучше. Тем не менее, честно говоря, я бы пошел на грубейший документ вы можете, потому что я думаю, что это дает вам наилучшую ценность из базы данных, только потому, что сегодня все головки ищет и ротации тарелки являются то, что убивают много производительности ввода-вывода, много дисковых потоков данных очень хорошо. Более крупные документы (предполагая хорошо расположенные данные, поскольку диван постоянно уплотняется, это не должно быть проблемой) перетекают больше, чем ищут. Поиск в памяти «свободен» по сравнению с диском.
Во что бы то ни стало проведите собственные тесты на нашем оборудовании, но отнесите все эти соображения к сердцу.
ИЗМЕНИТЬ:
После дополнительных экспериментов...
Пара интересных наблюдений.
Во время импорта больших документов ЦП одинаково важен для скорости ввода-вывода.Это происходит из-за количества кроссинга и ЦП, потребляемых при преобразовании JSON во внутреннюю модель для использования представлениями. Используя большие (350 000) документы, мои ЦП были в значительной степени исчерпаны (350%). Напротив, с меньшими документами, они гудели на 200%, хотя, в целом, это была одна и та же информация, просто портированная по-другому.
Для ввода-вывода, во время 350K документов, я строил 11MB/sec, но с меньшими документами он был только 8MB/sec.
Сжатие оказалось почти связанным с вводом-выводом. Мне трудно получить хорошие цифры по своему потенциалу ввода-вывода. Копия кэшированного файла толкает 40 + МБ/с. Уплотнение выполнялось примерно в 8MB/sec. Но это согласуется с сырой нагрузкой (предполагая, что диван перемещает сообщение по сообщению). Процессор ниже, так как он выполняет меньше обработки (он не интерпретирует полезные нагрузки JSON или перестраивает представления), а также один процессор, выполняющий эту работу.
Наконец, для чтения я попытался выгрузить всю базу данных. Для этого был привязан один процессор, и мой ввод-вывод был довольно низким. Я сделал этот пункт, чтобы убедиться, что файл CouchDB не был на самом деле кэширован, моя машина имеет много памяти, так что много вещей кэшируется. Необработанный дамп через _all_docs составлял всего около 1 МБ/с. Это почти все поиск и ротация задержки, чем что-либо еще. Когда я делал это с большими документами, ввод-вывод достигал 3 МБ/с, что просто показывает влияние потоковой передачи, о котором я говорил, как о преимуществе для больших документов.
И следует отметить, что на веб-сайте Couch существуют методы улучшения производительности, которых я не следовал. Примечательно, что я использовал случайные удостоверения. Наконец, это было сделано не как показатель производительности диван, а как место, где нагрузка, по-видимому, заканчивается. Большие и небольшие различия в документах, которые я думал, были интересными.
Наконец, максимальная производительность не так важна, как достаточно высокая производительность для приложений с аппаратным обеспечением. Как вы уже упомянули, вы делаете свое собственное тестирование, и это все, что действительно важно.
-121--1918114-Можно определить собственный тип переменной с помощью кода, например:
Public T_Person as Type
name as string
dateOfBirth as date
....
email() as string (*)
....
End type
Затем можно объявить тип T_person в коде с помощью:
Dim currentPerson as T_Person
currentPerson.name = myName
currentPerson.dateOfBirth = myDate
currentPerson.email(1) = myFirstEmail
....
(*) Я не помню сведения для объявления массивов в таких обстоятельствах. При определении переменной может потребоваться определить длину массива. Пожалуйста, проверьте справку.
Того же результата можно достичь, объявив модуль класса с именем, например, «Person». В этом модуле класса вы сможете не только следить за свойствами объекта (такими как имя, dateOfBirth и т.д.), но и за событиями объекта (инициализация и удаление). Вы также сможете создавать методы для этого объекта. Код будет выглядеть следующим образом:
Dim myPerson as Person
set myPerson = New Person
myPerson.name = myName
myPerson.dateOfBirth = myDate
if myPerson.age > 18 then (*)
'the guy is an adult'
myPerson.createAccount
Else
'the guy is not ...'
Endif
(*) Здесь возраст является вычисляемым свойством объекта, доступным, если значение dateOfBirth не равно null. Используйте Google «модуль класса VBA», чтобы найти различные примеры реализации модуля класса в VBA.
Теперь, если вы хотите управлять коллекцией подобных «объектов» (здесь, Лица),необходимо создать модуль класса для коллекции объектов (например, модуль класса «Лица») и использовать объект «Коллекция», доступный в VBA. Затем вы закончите с 2 различными модулями класса: Person (будет содержать сведения о каждом человеке) и Persons (будет содержать коллекцию Persons). Затем вы сможете получить код, такой как
Public myPersons as Persons 'at the app level, 1 main collection'
myPersons.add .... 'adding a new person to your collection'
myPersons.count ... 'counting number of persons in myPersons'
Пожалуйста, погуглите на «объекте коллекции VBA» для примеров по управлению коллекциями в VBA. Проверьте мое предложение кода, так как это было написано на лету, и без файла справки VBA.
Решение «Class» явно более мощное, но более сложное, чем «Type». Иди, если тебе нужно. Это определенно стоит боли!
PS: Я не очень доволен своими именами здесь, так как это может привести к очень запутанному коду при работе с коллекцией myPersons и экземпляром myPerson объекта o Person. Я бы посоветовал вам найти более очевидный, например, «PersonCollection» и «Person» или даже «Individual»
-121--3879687-Они расположены по адресу/System/Library/Framework/OpenGL.framework/Headers. Чтобы включить их, просто используйте:
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <OpenGL/glext.h>
#include <GLUT/glut.h>
и т.д. Убедитесь в наличии связи с соответствующими рамками, например,
cc <your_file.c> -framework GLUT -framework OpenGL
для OpenGL и GLUT
Мы делаем что-то подобное, чтобы запустить то, что на самом деле интеграция (регрессионные) тесты в рамках unittest
фреймворка (на самом деле его внутренняя настройка, которая дает нам огромные преимущества, такие как параллельное выполнение тестов на кластере машин и т.д., и т.д. - большая добавочная стоимость этой настройки, поэтому мы так заинтересованы в использовании unittest
фреймворк).
Каждый тест представлен в файле (параметры, используемые в этом тесте, за которыми следуют ожидаемые результаты). Наш integration_test считывает все такие файлы из каталога, анализирует каждый из них, а затем вызывает:
def addtestmethod(testcase, uut, testname, parameters, expresults):
def testmethod(self):
results = uut(parameters)
self.assertEqual(expresults, results)
testmethod.__name__ = testname
setattr(testcase, testname, testmethod)
Мы начинаем с пустого класса тестов:
class IntegrationTest(unittest.TestCase): pass
, а затем вызываем addtestmethod (IntegrationTest,...
в цикле, в котором мы читаем все соответствующие файлы и анализируем их, чтобы получить тестовое имя, параметры и выражения.
Наконец, мы называем наш собственный специализированный испытательный питатель, который выполняет тяжелый подъем (распределение тестов по доступным машинам в кластере, сбор результатов и т.д.). Мы не хотели изобретать это колесо с богатой добавленной стоимостью, поэтому мы делаем тестовый случай настолько близким к типичному «ручному кодированию», насколько это необходимо, чтобы «обмануть» бегуна, чтобы он работал правильно для нас; -).
Если у вас нет конкретных причин (хорошие тестовые бегуны или тому подобное) использовать unittest
's подход для ваших (интеграции?) тестов, вы можете обнаружить, что ваша жизнь проще с другим подходом. Однако этот вполне жизнеспособен, и мы вполне довольны его результатами (которые в основном включают в себя потрясающе быстрые запуски больших номеров люкс интеграционных/регрессионных тестов! -).
На моем сервере с вашей конфигурацией моя базовая производительность такова:
Это неплохо в моей книге, но это может использовать некоторые настройки.
Производительность InnoDB можно повысить на нескольких фронтах:
innodb _ buffer _ pool _ size
innodb _ buffer _ pool _ size
на моем сервере для 2G (более чем достаточно для этого теста) уменьшило время InnoDB до 4,60s С MySQL 5,1 + MySQL поддерживает подключаемые местом хранения механизмы. В частности, новый плагин InnoDB .
Новый механизм InnoDB обеспечивает множество многочисленных улучшений производительности, которые могут оказать значительное влияние на данный тип запроса.
Примечание:
XCode автоматически предоставляет все заголовочные файлы из инфраструктуры, добавленной в проект через
Так, "cocoa.h"
является частью "cocoa.framework"
- следовательно, # include < cocoa/cocoa.h >
OpenGl включен < OpenGL/gl.h >
, а не более ожидаемый < GL/gl.h >