Если вы получаете 404, возможно, вы используете версию API, которая не поддерживает отслеживание отгрузки: посмотрите документы, в которых написано Версия 1.5+ поддерживает API REST . Когда вы создаете wcapi
, на какую версию вы указали? Должно выглядеть примерно так (из документов на https://pypi.org/project/WooCommerce/ ):
wcapi = API(
url="http://example.com",
consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
version="wc/v3"
)
Одна оптимизация настраивает дескрипторы класса, так, чтобы Вы сохранили дескрипторы класса в другой базе данных и в объектном потоке, который Вы только отсылаете к ним идентификатором. Это уменьшает пространство, необходимое сериализированным данным. Посмотрите, например, как в одном проекте классы SerialUtil и ClassesTable делают это.
При создании классов Externalizable вместо сериализуемого может дать некоторые выигрыши в производительности. Оборотная сторона - то, что требуется большой физический труд.
Затем существуют другие библиотеки сериализации, например, jserial, который может дать лучшую производительность, чем сериализация Java по умолчанию. Кроме того, если граф объектов не включает циклы, то он может быть сериализирован немного быстрее, потому что сериализатор не должен отслеживать объекты, которые он видел (см., "Как он работает?" в FAQ jserial).
Я рекомендовал бы Вам реализовать пользовательский writeObject () и readObject () методы. Таким образом Вы будете способный устранять запись chidren узлы для каждого узла в дереве. При использовании сериализации по умолчанию каждый узел будет сериализирован со всем, что это - дети.
Например, writeObject () Древовидного класса должен выполнить итерации через все узлы древовидного и только записать данные узлов (без Узлов сами) с некоторыми маркерами, который определяет древовидный уровень.
Можно посмотреть на LinkedList, чтобы видеть, как это методы реализовало там. Это использует тот же подход для предотвращения пишущих предыдущих и следующих записей для каждого однократного въезда.
Не забывайте использовать 'переходное' ключевое слово, например, переменные, которые не должны быть сериализированы. Это дает Вам повышение производительности, потому что Вы больше не читаете/пишете ненужные данные.
Чтобы избежать необходимости писать Ваш собственный код сериализации, дайте Google Protocol Buffers попытку. Согласно их сайту:
Буферы протокола являются нейтральным в отношении языка, независимым от платформы, расширяемым механизмом Google для сериализации структурированных данных – думают XML, но меньший, быстрее, и более простой. Вы определяете, как Вы хотите, чтобы Ваши данные были структурированы однажды, затем можно использовать специальный сгенерированный исходный код, чтобы легко записать и считать структурированные данные в и от множества потоков данных и использования множества языков – Java, C++ или Python
Я не использовал его, но услышал много положительных моментов о нем. Плюс, я должен поддержать некоторый пользовательский код сериализации, и это может быть абсолютный кошмар, чтобы сделать (уже не говоря о разыскивании ошибок), так получение, кто-то еще, чтобы сделать это для Вас всегда является Хорошей Вещью.
Это - то, как я сделал бы это, сформировал бы вершину моей головы
Сериализация
Несериализация
Редактирование, Вы, возможно, должны были бы использовать сериализацию с двумя передачами и несериализацию, если у Вас есть циклические ссылки там, это усложняет вещи немного - но не так очень.
Кроме того, взгляните на XStream, библиотека для сериализации объектов к XML и назад снова.
Для производительности я предложил бы не использовать java.io сериализацию вообще. Вместо этого спуститесь на байтах сами.
Если Вы идете в java.io, сериализируют дерево, Вы, возможно, должны были бы удостовериться, что Ваша рекурсия не становится слишком глубокой, ни один путем выравнивания (как говорят TreeSet
делает), или располагающий сериализировать самые глубокие узлы сначала (таким образом, у Вас есть обратные ссылки, а не вложенный readObject
вызовы).
Я был бы удивлен, не было ли пути в Kodo для чтения всего дерева в в одном (или некоторые) идет.