Поиск файлов Azure-Blob-Storage и выборка в приложении MVC в C # - PullRequest
0 голосов
/ 29 января 2019
Код

ниже предназначен для извлечения данных из файлов BLSON JSON и отображения в пользовательском интерфейсе.

Код занимает слишком много времени при перемещении.

, если путь к BLOB-файлу равен

myblob//mydata//1.json

myblob//mydata//2.json

Я хочу проверить, как [{"name": "super"}]

, если я нашел name = "super" в любом из 1.json или 2.json, мне нужно вернуть этот набор данных.

var blobDirectory = container.GetDirectoryReference(directoryreference);
                IEnumerable<IListBlobItem> items = blobDirectory.ListBlobs(useFlatBlobListing: false);

                string blobFilePath = String.Empty;
                foreach (var blob in items.OfType<CloudBlob>()

        .OrderByDescending(b => b.Properties.LastModified))
                {
                    string blobFileFullPath = Path.GetDirectoryName(blob.Name).Replace("\\", "/");
                    blobFilePath = Path.GetDirectoryName(blobFileFullPath).Replace("\\", "/");
                    if (blobFilePath != null)
                    { break; }

                }
  var blobFileDirectory = container.GetDirectoryReference(blobFilePath);
                IEnumerable<IListBlobItem> fileitems = blobFileDirectory.ListBlobs(useFlatBlobListing: false);

                foreach (var fileitem in fileitems.OfType<CloudBlob>())
                {
                    CloudBlockBlob cbb = container.GetBlockBlobReference(fileitem.Name);
                    var messageString = "";
                    using (MemoryStream stream = new MemoryStream())
                    {
                        cbb.DownloadToStream(stream);
                        string messageData = System.Text.Encoding.UTF8.GetString(stream.ToArray());
                        messageData = messageData.TrimEnd();
                        if (!messageData.EndsWith("]"))
                        {
                            messageData = messageData + "]";
                        }
                        mymodel.BlobDeviceId = Session["name"].ToString();

                        JArray messageDataArray = JArray.Parse(messageData);
                        List<string> deviceCollection = new List<string>();
                        deviceCollection = Session["deviceCollection"] as List<string>;
                        foreach (var deviceId in deviceCollection)
                        {
                            foreach (JObject obj in messageDataArray.Children<JObject>())
                            {
                                if (obj["name"].ToString() == "super"
                                {

                                    messageString = JsonConvert.SerializeObject(obj);
                                    jsonFormatted = JValue.Parse(messageString).ToString(Formatting.Indented);
                                    mymodel.BlobDeviceId = deviceId;
                                    goto outerloop;
                                }

                            }

                        }

                    }

                }
            outerloop: if (jsonFormatted == "")
                {
                    jsonFormatted = "Currently data is not available";
                }
            }
            catch (Exception ex)
            {

            }
            return jsonFormatted;

        }

1 Ответ

0 голосов
/ 29 января 2019

Я не думаю, что этот подход правильный.Это займет время независимо.Я предполагаю, что ваши файлы JSON будут расти, и это займет еще больше времени.Вам нужно проиндексировать структуру JSON.Поиск Azure очень удобен в этом случае.Все, что вам нужно сделать, это проиндексировать ваш блоб и использовать поиск API.Вы можете найти больше информации здесь

https://docs.microsoft.com/en-us/azure/search/search-semi-structured-data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...